I have the following code.
My question is in the code
int main() {
....
if ((uproc.pid = fork()) == -1) {
return -1;
}
if (uproc.pid == 0) {
/* child */
const char *argv[3];
int i = 0;
argv[i++] = "/bin/sh";
argv[i++] = "/my/script.sh";
argv[i++] = NULL;
execvp(argv[0], (char **) argv);
exit(ESRCH);
} else if (uproc.pid < 0)
return -1;
/* parent */
int status;
while (wait(&status) != uproc.pid) {
DD(DEBUG,"waiting for child to exit");
}
// If /my/script.sh exit accidentally in some place with error.
// can I catch this error right here?
......
}
The exit status of the child is provided by the
waitfunction, in thestatusvariable.You get the exit status by using the
WEXITSTATUSmacro, but only if the program exited normally (i.e. calledexitor returned from itsmainfunction):Read the manual page for
waitfor more information.