Sie können den Beendigungsstatus eines untergeordneten Prozesses prüfen, indem Sie wait
, waitpid
, wait3
oder wait4
aufrufen.
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
pid_t pid = fork();
switch(pid) {
case 0:
// We are the child process
execl("/bin/ls", "ls", NULL);
// If we get here, something is wrong.
perror("/bin/ls");
exit(255);
default:
// We are the parent process
{
int status;
if(waitpid(pid, &status, 0) < 0) {
perror("wait");
exit(254);
}
if(WIFEXITED(status)) {
printf("Process %d returned %d\n", pid, WEXITSTATUS(status));
exit(WEXITSTATUS(status));
}
if(WIFSIGNALED(status)) {
printf("Process %d killed: signal %d%s\n",
pid, WTERMSIG(status),
WCOREDUMP(status) ? " - core dumped" : "");
exit(1);
}
}
case -1:
// fork failed
perror("fork");
exit(1);
}
}
Rückgabewert (z. B. Ergebnis von exit() oder ähnlich) oder Ausgabe (d. H. Stdout/stderr)? Dein Fragetitel sagt eine Sache aus, aber deine Frage die andere :-) –
Ich bin nicht sicher, dass du verstehst, was 'execv' tut; Es ** ersetzt ** Ihren Prozess mit dem angegebenen Prozess. Dein Prozess existiert nicht mehr, also gibt es nichts, was man capturen könnte! –
'execv' kehrt nur im Fehlerfall zurück. –