c – 线程,信号和儿童处理:多么世界……多么美好的世界
所以我有一个有趣的设计问题.我正在研究SLES 9 Linux,内核2.6,并且有一个充当RPC客户端的多线程应用程序.我们的想法是拥有很少的线程来处理请求;一个这样的请求是作为子进程开始“工作”. 现在我遇到的问题是设置一个适当的信号处理程序来处理各种信号.我所做的是为信号处理设置另一个线程,使其处于sigwait()状态,同时阻塞其他线程中的所有相关信号.我们的想法是,流程的所有信号都应传递给信号处理线程,其余的线程应该只关心处理请求时的处理. 所有这些都很有效,除了那些腐烂的孩子,总是把他们的飞盘扔进我的后院并践踏我的草坪……但是严肃地说,我的信号处理线程没有得到SIGCHLD信号.我对这里发生的事情的最好猜测是因为信号处理线程不是产生子节点的线程,它不是接收SIGCHLD的线程,而是我的工作线程. 至于我的问题: >我是不是疯狂的SIGCHLD没有进入我的信号处理程序线程? 根据David Schwartz的请求SLES9:NPTL 2.3.5,SLES10:NPTL2.4 最佳答案 (编辑:因为我无法阅读,你已经在做正确的pthread_sigmask调用….) 在2.6内核中,当SIGCHLD设置为ignore / SIG_IGN时,内核将为您收集子进程.听起来如果为信号处理线程设置了SIGCHLD的特定处理程序,以避免将SIGCHLD设置为SIG_IGN / SIG_DFL. 编辑(来自评论): (编辑:青岛站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |