如果服务器需要停止,所有程序都将被杀死,最终会出现KILL信号.现在,这可以通过遍历所有注册的PID并等待CHILD信号处理程序来删除PID.如果子程序未正确退出,则会失败.因此,我想使用kill与waitpID结合使用,以确保PID列表被清理并记录并执行其他的其他 *** 作.
考虑下一个代码示例:
kill(pID,SIGKILL);waitpID(pID,NulL,WNOHANG);
摘录from waitpID(2):
waitpID(): on success,returns the process ID of the child whose state has changed; if WNOHANG was specifIEd and one or more child(ren)
specifIEd by pID exist,but have not yet changed state,then 0 is returned. On error,-1 is returned.
在下一个功能开始之前,pID给出的过程是否总是消失?在上述情况下waitpID总是返回-1吗?
解决方法Is the process given by pID always gone before the next function kicks in?
没有保证.在多处理器上,您的进程可能在cpu 0上,而内核中的被杀死进程的清理发生在cpu 1上.这是一个古典的竞争条件.即使在单核处理器上也不能保证.
Will waitpID always return -1 in the above case?
由于它是一种竞争条件 – 在大多数情况下也许会这样.但是没有保证.
由于你对状态不感兴趣,所以在这种情况下,这个semicode可能更合适:
// kill all childsforeach(pID from pIDList) kill(pID,SIGKILL);// gather results - remove zombIEswhile( not_empty(pIDList) ) pID = waitpID(-1,WNOHANG); if( pID > 0 ) remove_List_item(pIDList,pID); else if( pID == 0 ) sleep(1); else break;总结
以上是内存溢出为你收集整理的KILL信号是否立即退出进程?全部内容,希望文章能够帮你解决KILL信号是否立即退出进程?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)