首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wait()/waitpid()返回1,而不是孩子的pid,如何解决这个问题?

wait()/waitpid()返回1,而不是孩子的pid,如何解决这个问题?
EN

Stack Overflow用户
提问于 2010-12-11 12:13:43
回答 1查看 2.9K关注 0票数 5

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

在我的reaper()中,我尝试获取父母即将完成的孩子的pid (这里不是粗鲁的词)。但是wait()不返回子对象的pid;相反,它返回1。我在任何地方都找不到返回值为1的doc。有什么头绪吗?

代码语言:javascript
复制
void    reaper(int sig)
{
    int status, killedpid;

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

我的结果:

代码语言:javascript
复制
reaper 5933 killed 1 //actual child pid is 5936

提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-11 12:27:28

这是conditional error中的经典赋值-表达式的求值如下(因为比较比赋值具有更高的precedence ):

代码语言:javascript
复制
if ( killedpid = ( wait( &status ) >= 0 )) { ...

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

代码语言:javascript
复制
if (( killedpid = wait( ... )) >= 0 ) { ...
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4415168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档