Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C wait()/waitpid()返回1,而不是子级的pid,如何修复?_C_Parent Child_Wait_Pid - Fatal编程技术网

C wait()/waitpid()返回1,而不是子级的pid,如何修复?

C wait()/waitpid()返回1,而不是子级的pid,如何修复?,c,parent-child,wait,pid,C,Parent Child,Wait,Pid,这是一个后续行动 在我的reaper()中,我试图获取孩子的pid,而家长即将完成(这里是非残酷的词)。但是wait()不返回子对象的pid;相反,它返回1。我在任何地方都找不到返回值为1的文档。有什么头绪吗 void reaper(int sig) { int status, killedpid; while(killedpid = (/*waitpid(-1, &status, WNOHANG)*/wait(&status)) >= 0)

这是一个后续行动

在我的reaper()中,我试图获取孩子的pid,而家长即将完成(这里是非残酷的词)。但是wait()不返回子对象的pid;相反,它返回1。我在任何地方都找不到返回值为1的文档。有什么头绪吗

void    reaper(int sig)
{
    int status, killedpid;

    while(killedpid = (/*waitpid(-1, &status, WNOHANG)*/wait(&status)) >= 0)
    {
        printf("reaper %d killed %d\n", getpid(), killedpid);
    }
}
我的结果:

reaper 5933 killed 1 //actual child pid is 5936

提前谢谢你

这是条件错误中经典的赋值-表达式的计算如下(因为比较比赋值高):

killedpid
将获得一个值TRUE,在C中为
1
。要绕过此问题,请使用括号并使用高警告级别编译,如
-Wall-pedantic

if (( killedpid = wait( ... )) >= 0 ) { ...

非常感谢您的洞察力!PHP也是如此。我使用了
pcntl_waitpid()
,并且出现了相同的错误,导致返回值始终显示为
1
。哦,我说继续使用术语。这就是尼克斯的部分乐趣。“孩子死了,父母收获了僵尸的过程。”
if (( killedpid = wait( ... )) >= 0 ) { ...