5

这是当父母被告知要杀死孩子时如何将附加参数挤入收割机函数的后续行动(c)?

在我的 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

先感谢您!

4

1 回答 1

15

这是条件错误中的经典赋值- 表达式的评估如下(因为比较的优先级高于赋值):

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

killedpid获得 TRUE 的值,它1在 C 中。要解决此问题,请使用括号并使用高警告级别进行编译,例如-Wall -pedantic

if (( killedpid = wait( ... )) >= 0 ) { ...
于 2010-12-11T04:27:27.817 回答