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

Som*_*ent 5 c pid parent-child wait

这是一个跟进如何在父母被发信号杀死孩子的时候将其他参数压入收割者功能(c)?

在我的收割机()中,我试图获得父母即将完成的孩子的pid(这里是非残酷的词).但是wait()不会返回孩子的pid; 相反,它返回1.我无法在任何地方找到返回值为1的doc.抬头?

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

    while(killedpid = (/*waitpid(-1, &status, WNOHANG)*/wait(&status)) >= 0)
    {
        printf("reaper %d killed %d\n", getpid(), killedpid);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的结果:

reaper 5933 killed 1 //actual child pid is 5936
Run Code Online (Sandbox Code Playgroud)

先感谢您!

Nik*_*sov 13

这是条件错误中的经典赋值 - 表达式计算如下(因为比较具有更高的优先级,然后赋值):

if ( killedpid = ( wait( &status ) >= 0 )) { ...
Run Code Online (Sandbox Code Playgroud)

killedpid将得到TRUE值,这是1在C.为了解决这个问题使用括号和高警告级别编译-Wall -pedantic:

if (( killedpid = wait( ... )) >= 0 ) { ...
Run Code Online (Sandbox Code Playgroud)