父进程如何通过调用_exit的子进程等待来获得终止状态
作者:互联网
我已阅读以下声明.
The status argument given to _exit() defines the termination status of
the process, which is available to the parent of this process when it
calls wait().A process is always successfully terminated by _exit() (i.e., _exit()
never returns).
题
如果_exit没有返回,父进程如何获得终止状态
从孩子的过程到等待?
解决方法:
每当进程退出时(无论是否通过调用_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标志不会产生僵尸,因为内核会重新获得它们.但是,代码不可移植,最好使用等待系统调用.
标签:c-3,linux,multiprocessing,ubuntu-10-04 来源: https://codeday.me/bug/20191009/1876148.html