C 为什么WIFEXITED在子进程退出后返回false?
我有一个简单的程序,它创建了一个子进程,立即调用C 为什么WIFEXITED在子进程退出后返回false?,c,fork,wait,C,Fork,Wait,我有一个简单的程序,它创建了一个子进程,立即调用exit()。因此,在父进程中,我期望WIFEXITED(status)评估为true,但事实并非如此。相反,WIFSTOPPED(status)计算为true,并打印“stopped”。有人能解释我为什么会有这种行为吗?我在OSX上运行,并使用gcc进行编译。谢谢 #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <sy
exit()
。因此,在父进程中,我期望WIFEXITED(status)
评估为true
,但事实并非如此。相反,WIFSTOPPED(status)
计算为true
,并打印“stopped”。有人能解释我为什么会有这种行为吗?我在OSX上运行,并使用gcc进行编译。谢谢
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/wait.h>
int main(void)
{
int pid;
int status;
pid = fork();
if (pid < 0)
printf("fork failed\n");
else if (pid == 0)
{
wait(&status);
if (WIFEXITED(status))
printf("exited\n");
else if (WIFSTOPPED(status))
printf("stopped\n");
}
else
exit(0);
return (0);
}
#包括
#包括
#包括
#包括
内部主(空)
{
int-pid;
智力状态;
pid=fork();
if(pid<0)
printf(“fork失败\n”);
否则如果(pid==0)
{
等待(&状态);
如果(妻子退出(状态))
printf(“已退出\n”);
否则如果(WIFSTOPED(状态))
printf(“已停止\n”);
}
其他的
出口(0);
返回(0);
}
您拥有向后的子级和父级逻辑。父节点立即退出,子节点正在调用等待
。由于该子项没有子项,wait
将返回错误(并且不接触状态
),因为该子项没有子项(ECHILD
),然后您将测试状态
的(未初始化)值并对其执行操作,从而导致未定义的行为
更改:
else if (pid == 0)
致:
它应该按预期的那样工作。您拥有子对象和父对象的向后逻辑。父节点立即退出,子节点正在调用
等待
。由于该子项没有子项,wait
将返回错误(并且不接触状态
),因为该子项没有子项(ECHILD
),然后您将测试状态
的(未初始化)值并对其执行操作,从而导致未定义的行为
更改:
else if (pid == 0)
致:
它应该像预期的那样工作