C wait()/waitpid()返回1,而不是子级的pid,如何修复?
这是一个后续行动 在我的reaper()中,我试图获取孩子的pid,而家长即将完成(这里是非残酷的词)。但是wait()不返回子对象的pid;相反,它返回1。我在任何地方都找不到返回值为1的文档。有什么头绪吗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)
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 ) { ...