Hi, Wie im Betreff zu sehen, frag ich mich, ob es möglich ist unter Linux die int main() mit exit(x) statt return zu verlassen und iwie ein weiteres programm zu starten!? Hintergrund ist, wenn das Prog zu Ende ist, soll es sich mit nem anderen Parameter nochmal selbst aufrufen. Grüße Hans
Danke für die Antworten! Habs mit temp = system("sudo reboot"); gelöst. Grüße Hans
Hans M. schrieb: > wenn das Prog zu Ende ist, soll es sich mit nem anderen > Parameter nochmal selbst aufrufen. Hans M. schrieb: > Habs mit temp = system("sudo reboot"); gelöst. Ziemlicher Widerspruch, oder?
Nene, davor kommen nochn paar Zeilen ;) Die mit dem reboot war nur als Beispiel gedacht :-D Hans
System forkt und macht dann ein exec, sprich du hast dann 2 Prozesse. Wenn du dein Programm mit exec startest wird der Hauptprozess durch deine Zielapplikation ausgewechselt.
Mario schrieb: > System forkt und macht dann ein exec, sprich du hast dann 2 Prozesse. Mindestens drei, denn erstmal wird eine Shell gestartet, und in der wird dann das an system() übergebene Kommando ausgeführt.
Wenn man system oder exec nutzt, um dass program sich selbst aufrufen zu lassen, wird mit jedem aufruf ein neuer prozess erstelt, wobei der erste erhalten bleibt bis der letzte beendet wurde. Ich würde eher folgendes konstrukt wählen:
1 | // ungetestet |
2 | |
3 | void appMain(int argc;char** argv){ |
4 | // code |
5 | } |
6 | |
7 | int largc,char** largv; |
8 | jmp_buf startpoint; |
9 | |
10 | int main(int largc,char** largv){ |
11 | argc=largc; |
12 | argv=largv; |
13 | setjmp(startpoint); |
14 | return appMain(argc,argv); |
15 | } |
16 | |
17 | void restart(int largc,char** largv){ |
18 | argc=largc; |
19 | argv=largv; |
20 | longjmp(startpoint, 0); |
21 | } |
Daniel A. schrieb: > Ich würde eher folgendes > konstrukt wählen: und was ist mit den ganzen globalen Variabel die nicht neu initialisiert werden? Oder die Freigabe vom sämtlichen Speicher sowie Recourcen (files, Threads usw.) Wenn man ein stabil laufendes Programm will, sollte man so ein Mist nicht machen.
Daniel A. schrieb: > Wenn man system oder exec nutzt, um dass program sich selbst aufrufen zu > lassen, wird mit jedem aufruf ein neuer prozess erstelt, wobei der erste > erhalten bleibt bis der letzte beendet wurde Nein, bei exec eben nicht, das ersetzt den Prozess. Wie dein Code einen neuen/anderen Prozess starten soll so ganz ohne Aufruf von exec, fork, system... ist aber nicht ganz klar.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.