我看一看等待手册页,但他们只说进程的状态已终止,按信号停止或按信号恢复。如果我传入wstatus = 0,该怎么办。例如,此代码使父级等待所有子级终止。为什么状态= 0?
pid_t wpid;
int status = 0;
while (wpid = wait(&status) > 0);
wait
是系统调用,使parent process
等待(即挂起)以等待child process
中的状态更改。根据文档,状态更改为:
状态更改被认为是:子项终止;这个孩子被一个信号挡住了;或该孩子被信号恢复。
因此,传递给status
的wait
,如果不是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)
status
变量是在其中编码的输出参数有关子进程终止方式的信息。