我已阅读以下声明。
给 _exit() 的 status 参数定义了终止状态
该进程,当该进程的父进程可用时,该进程可用
调用 wait()。
进程总是由 _exit() 成功终止(即,_出口()
一去不复返).
Question
If _exit不返回,父进程如何获取终止状态
从子进程通过wait?
每当进程退出时(无论是否通过调用 _exit(int Exit_Status) ),内核都会向其父进程发送 SIGCHLD 函数。家长可以选择
1. Ignore the incoming signal
2. Catch it by installing a signal handler
具体来说,父进程可以通过调用 wait() 或 waitpid() 函数来捕获退出状态。在这种情况下,LSB 可供父级使用。具体状态可以通过如下方式获知
int status;
wpid = waitpid(child_pid, &status, WUNTRACED);
由于只有最后 8 位可用,因此通过与 255 进行按位与运算来屏蔽高位是合乎逻辑的。系统定义的宏会为您完成此操作
WEXITSTATUS(status);
因此,为了获取子状态 - 您可以在 waitpid 语句之后使用
printf("child exited, status=%d\n", WEXITSTATUS(status));
忽略 SIGCHLD 可能会导致创建僵尸(失效)进程。为 SIGCHLD 设置 SA_NOCLDWAIT 标志不会在内核获取僵尸时产生僵尸。然而,代码不可移植,最好使用 wait 系统调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)