Forum: PC-Programmierung Unter Linux mit exit() programm starten


von Hans M. (Gast)


Lesenswert?

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

von huhu (Gast)


Lesenswert?

man exec

von DirkB (Gast)


Lesenswert?

Und

man atexit

von Hans M. (Gast)


Lesenswert?

Danke für die Antworten!
Habs mit temp = system("sudo reboot"); gelöst.

Grüße Hans

von OldMan (Gast)


Lesenswert?

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?

von Hans M. (Gast)


Lesenswert?

Nene, davor kommen nochn paar Zeilen ;)
Die mit dem reboot war nur als Beispiel gedacht :-D

Hans

von Mario (Gast)


Lesenswert?

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.

von Rolf M. (rmagnus)


Lesenswert?

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.

von Daniel A. (daniel-a)


Lesenswert?

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
}

von Peter II (Gast)


Lesenswert?

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.

von Dr. Sommer (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.