fork, execv und return/exit
-
Hallo,
ich starte mit fork() einen neuen Prozess. Im Kindprozess überschreibe ich den Originalprozess direkt mit execv. Falls execv fehlschlägt, mache ich exit(EXIT_FAILIRE).
Im Elternprozess warte ich auf den geforkten Kindprozess (um den Status auszulesen). Dieser ist bei mir (Fedora 17) immer 256. Warum ist das so, wo doch EXIT_FAILURE 1 ist?
Schreibe ich statt exit(EXIT_FAILIRE) return -1, ist der Status eine sehr große Zahl (65xxx).Steckt da ein System dahinter oder ist das auf jeder Plattform anders?
Was ich eigentlich erreichen möchte: Sollte execv nicht klappen, will ich einen eindeutigen Status zurückgeben können, um den Fehler im Elternprozess zu behandeln. Wie geht das am zuverlässigsten?
Lg
Der Freak
-
man man: wait(2) schreibt:
The following macros may be used to test the manner of exit of the process.
-
Ja, aber wenn ich exit(EXIT_FAILURE) ausführe und dann wait(&status), ist dann status IMMER 256? Das steht in der Manpage nicht drin
-
Doch. Musst nur weiterlesen.
-
Habe ich das so richtig verstanden?
if(WIFEXITED(status) == 1 && WEXITSTATUS(status) == 1) //dann wurde exit(EXIT_FAILURE) aufgerufen
Jedenfalls lese ich das aus der Manpage..
-
Ja, fast. 2 Sachen würde ich aber ändern
1. WIFEXITED ist nur "non-zero", wenn exit() aufgerufen wurde. Also lass das erste "== 1" einfach weg.
2. Das zweite "== 1" würde ich durch "== EXIT_FAILURE" ersetzen. Das ist aber - im Gegensatz zum ersten - nur Kosmetik.
-
Erledigt, danke
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89 und C99) in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.