6进程原语:wait()和waitpid()函数(三)

2015-07-20 17:38:54 · 作者: · 浏览: 21
CAgICAgICAgIGludCBzdGF0dXM7PC9wPgoKPHA+IDwvcD4KCjxwPiAgICAgICAgICBjcGlkID0gZm9yaygpOzwvcD4KCjxwPiAgICAgICAgICBpZiAoY3BpZCA9PSAtMSkgezwvcD4KCjxwPiAgICAgICAgICAgICAgCnBlcnJvcig="fork");

exit(EXIT_FAILURE);

}

if (cpid == 0) { /*Code executed by child */

printf("Child PID is%ld\n", (long) getpid());

if (argc == 1)

pause(); /* Wait for signals */

_exit(atoi(argv[1]));

} else { /*Code executed by parent */

do {

w = waitpid(cpid,&status, WUNTRACED | WCONTINUED);

if (w == -1) {

perror("waitpid");

exit(EXIT_FAILURE);

}

if (WIFEXITED(status)) {

printf("exited,status=%d\n", WEXITSTATUS(status));

} else if(WIFSIGNALED(status)) {

printf("killed by signal%d\n", WTERMSIG(status));

} else if(WIFSTOPPED(status)) {

printf("stopped bysignal %d\n", WSTOPSIG(status));

} else if(WIFCONTINUED(status)) {

printf("continued\n");

}

} while (!WIFEXITED(status)&& !WIFSIGNALED(status));

exit(EXIT_SUCCESS);

}

}