wait(&wstatus)中确切的wstatus

问题描述 投票:0回答:2

我看一看等待手册页,但他们只说进程的状态已终止,按信号停止或按信号恢复。如果我传入wstatus = 0,该怎么办。例如,此代码使父级等待所有子级终止。为什么状态= 0?

pid_t wpid;
int status = 0;
while (wpid = wait(&status) > 0);
c wait
2个回答
0
投票

wait是系统调用,使parent process等待(即挂起)以等待child process中的状态更改。根据文档,状态更改为:

状态更改被认为是:子项终止;这个孩子被一个信号挡住了;或该孩子被信号恢复。

因此,传递给statuswait,如果不是NULL,则将其设置为一个值,该值提供有关子进程状态如何更改的信息。可以使用以下宏检查该值以获取更多见解:

WIFEXITED(状态)如果子项正常终止(即通过调用exit(3)或_exit(2)或从main()返回),则返回true。

WEXITSTATUS

(状态)返回子项的退出状态。它由状态参数的最低有效8位组成,该状态参数的子级是在调用exit(3)或_exit(2)时指定的,或者是main()中return语句的参数。仅当WIFEXITED返回true时,才应使用此宏。

WIFSIGNALED

(状态)如果子进程被信号终止,则返回true。

还有更多内容,可以找到here

在您的代码中,

wpid = wait(&status)

wpid是已终止的子进程的pid(必须为> 0)


0
投票

status变量是在其中编码的输出参数有关子进程终止方式的信息。

© www.soinside.com 2019 - 2024. All rights reserved.