系统相关
首页 > 系统相关> > 父进程如何通过调用_exit的子进程等待来获得终止状态

父进程如何通过调用_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