【发布时间】:2014-07-05 12:46:58
【问题描述】:
我正在编写一个 SIGCHLD 处理程序,我想知道在什么情况下调用 waitpid() 会返回 -1?
更具体地说,如果我创建一个循环,在其中调用 waitpid(...) 并希望它运行直到所有已终止的子进程都被回收,我是否会迭代直到 waitpid(...) 返回 -1?否则,我怎么知道还有没有孩子需要收割呢?
【问题讨论】:
-
一个信号可能会中断等待...
-
您是否尝试过阅读手册页?它解释了返回-1的原因。
-
我查看了手册页。要么我不理解其中的描述,要么 waitpid() 返回 -1 可能不是我所描述的循环所必需的,它具有收获所有终止子进程的效果。无论哪种情况,我都在寻找答案。
-
处理 sigchld 不是一个好习惯。它与任何产生子进程的库代码(包括 popen)都危险地不兼容。相反,您应该只从创建它们的逻辑模块中为您知道的孩子 waitpid。
标签: c process handler waitpid sigchld