Return value von fork()
-
Guten Morgen,
ich bräuchte den ExitCode von dem Childprocess den ich mit fork() gestartet habe. Ich hoffe mal das meine Frage verständlich war :pEs wäre nett wenn mir einer hier weiter helfen könnte denn als ich meinen Ausbilder fragte meinte er "Nimm GetExitCodeProcess" und das ist bekannterweise die funktion die in der Winapi dafür zur verfügung steht... problem besteht nur leider daran das wir für Debian entwickeln und es mir rein garnichts nützt es unter windows geschafft zu haben
-
man 2 wait
-
irgendwie werde ich daraus nicht schlau
-
Und wie kann ich dir helfen? Wo ist das Problem? Mit "verstehe ich nicht" kann ich leider wenig anfangen. Was verstehst du nicht?
-
Also
if (WIFEXITED(status)) { printf("exited, status=%d\n", WEXITSTATUS(status));
soll ja dann den Exitcode ausgeben oder?
habe es von der seite hier: http://linux.die.net/man/2/wait
-
Synonym schrieb:
Also
if (WIFEXITED(status)) { printf("exited, status=%d\n", WEXITSTATUS(status));
soll ja dann den Exitcode ausgeben oder?
habe es von der seite hier: http://linux.die.net/man/2/waitJa. Tut es das nicht?
-
Man sollte ja eigentlich keine vollständigen Lösungen liefern, aber ich bin ja kein Pädagoge und daher weiß ich das ja nicht. Also hier ist ein Beispiel:
#include <iostream> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include <errno.h> #include <string.h> int main(int argc, char* argv[]) { if (argc <= 1) { std::cerr << "usage: " << argv[0] << " process" << std::endl; return 1; } pid_t pid = fork(); if (pid < 0) { std::cerr << "fork failed with errno " << errno << ": " << strerror(errno) << std::endl; return 1; } if (pid != 0) { // parent int status; wait(&status); std::cout << "return code: "<< WEXITSTATUS(status) << std::endl; } else { // child execvp(argv[1], argv+1); std::cerr << "exec failed with errno " << errno << ": " << strerror(errno) << std::endl; } }
Abgespeichert als subproc.cpp und übersetzt mit "g++ -o subproc subproc.cpp" bekommst Du ein Binary mit dem Namen subproc. Das kannst Du dann beispielsweise so aufrufen:
./subproc ls foobar
Der führt ls aus und gibt seinen return code aus.