假设我有一个启动多个子进程的进程.家长需要知道子元素何时退出.
我可以使用waitpid
,但如果/当父线程需要退出时,我无法告诉在waitpid
中被阻止的线程优雅地退出并加入它.让事情自行清理是件好事,但这可能没什么大不了的.
我可以使用waitpid
和WNOHANG
,然后任意Hibernate 一段时间,以避免忙碌的等待.然而,我只能知道一个子元素是否偶尔离开过.在我的情况下,我知道子元素什么时候出来可能不是特别关键,但我想尽快知道……
我可以使用一个SIGCHLD
的信号处理程序,在信号处理程序中,当一个子线程退出时,我可以做任何我想做的事情,或者向另一个线程发送一条消息来执行一些操作.但是,使用信号处理程序会稍微混淆代码流.
我真正想做的是在某个超时时间使用waitpid
,比如说5秒.因为退出进程不是一个时间关键的操作,所以我可以懒洋洋地向线程发出退出信号,同时在剩余的时间里它仍然被阻塞,随时准备做出react .Is there such a call in linux? Of the alternatives, which one is best?
编辑:
另一种基于回复的方法是在所有线程中用pthread
\_sigmask()
阻塞SIGCHLD
.然后在一个线程中,继续拨打sigtimedwait()
,同时寻找SIGCHLD
.这意味着我可以在调用时超时,并判 break line 程是否应该退出,如果不应该退出,则保持阻塞状态,等待信号.一旦一个SIGCHLD
被传递到这个线程,我们就可以立即对它做出react ,并且按照等待线程的顺序进行,而无需使用信号处理程序.