gpt4 book ai didi

c - wait()/waitpid() 返回 1,而不是 child 的 pid,如何解决?

转载 作者:太空狗 更新时间:2023-10-29 14:52:52 26 4
gpt4 key购买 nike

这是对 How to squeeze in additional parameters to a reaper function when a parent is signalled to kill a child (c)? 的跟进

在我的 reaper() 中,我尝试获取父项即将完成的子项的 pid(这里不是粗话)。但是 wait() 不返回 child 的 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

提前致谢!

最佳答案

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

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

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

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

关于c - wait()/waitpid() 返回 1,而不是 child 的 pid,如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4415168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com