C 等待中的wstatus(&wstatus)到底是什么

C 等待中的wstatus(&wstatus)到底是什么,c,wait,C,Wait,我看了一下wait手册页,但他们只说进程的状态是终止、信号停止或信号恢复。如果我传入wstatus=0怎么办。发生了什么事。例如,此代码使父级等待所有子级终止。为什么状态=0 pid_t wpid; int status = 0; while (wpid = wait(&status) > 0); 状态变量是一个输出参数,在其中进行编码 有关子进程终止方式的信息 您可以测试ifWIFEXITEDstatus以确定终止是否正常; i、 e.由于从主管道退出或返回。 如果前面的条件为

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

pid_t wpid;
int status = 0;
while (wpid = wait(&status) > 0);
状态变量是一个输出参数,在其中进行编码 有关子进程终止方式的信息

您可以测试ifWIFEXITEDstatus以确定终止是否正常; i、 e.由于从主管道退出或返回。 如果前面的条件为true,则可以获得整数 退出代码的值wait是使父进程等待的系统调用,即挂起它以等待子进程中的状态更改。根据文件,状态变化为:

状态更改被视为:子级终止;孩子被一个信号拦住了;或者孩子被一个信号打断了

因此,传递给wait的状态,如果不是NULL,那么它将被设置为一个值,该值提供有关子进程状态如何更改的信息。 可以使用以下宏检查此值以获得更多信息:

退婚状态 如果子级正常终止,即通过调用exit3或_exit2,或通过从main返回,则返回true

WEXIT状态 返回子级的退出状态。这由status参数的最低有效8位组成,子参数在调用exit3或_exit2时指定,或作为main中return语句的参数。只有当WIFEXITED返回true时,才应使用此宏

WIFSIGNALEDstatus 如果子进程被信号终止,则返回true

还有一些,可以找到

在你的代码中

wpid = wait(&status)

wpid是已终止的子进程的pid,当wpid=wait&status>0;?!?当wpid=wait&status>0;这就是为什么将赋值放在条件子句中是一个坏主意。当您调用wait&status时,先前处于status的值是什么并不重要。它可以是0或42,也可以不初始化;函数wait从不使用它。所以我不明白你在问什么。它是一个输出参数–wait函数写入pointed at变量;“它并没有从中读出来。@JonathanLeffler是的,这就是我需要的答案。”。感谢you@AndrewHenle谢谢你指出。我只是从另一篇文章中抄袭。的POSIX规范说:等待函数从任何子进程获取进程终止的状态信息。waitpid函数从指定的子进程子集获取进程终止的状态信息,以及可选的进程停止和/或继续。位于die.net的Linux手册页上说:等待系统调用暂停调用进程的执行,直到其一个子进程终止。您必须使用waitpid或waitid来检测其他状态更改。