linux – 我是否应该担心订单过程中的流程接收信号?

linux – 我是否应该担心订单过程中的流程接收信号?,第1张

概述我想通过将SIGTERM发送到其中的进程来终止进程组.这可以通过kill命令完成,但我找到的手册提供了有关其工作原理的一些细节: int kill(pid_t pid, int sig); ... If pid is less than -1, then sig is sent to every process in the process group whose ID is 我想通过将SIGTERM发送到其中的进程来终止进程组.这可以通过kill命令完成,但我找到的手册提供了有关其工作原理的一些细节:

int kill(pID_t pID,int sig);   ...   If pID is less than -1,then sig is sent to every  process  in   the process group whose ID is -pID.

但是,信号将以哪种顺序发送到组成组的进程?想象一下以下情况:在组中的主进程和从进程之间设置管道.如果slave在处理kill(-pID)期间被杀死,而master仍然没有,则master可能会将此报告为内部故障(在收到孩子死亡的通知时).但是,我希望所有进程都能理解这种终止是由其进程组外部的东西引起的.

我怎样才能避免这种混乱?我应该做的不仅仅是杀人(-pID,SIGTERM)?或者它是由OS的底层属性解决的,我不知道它?

请注意,我无法修改组中进程的代码!

解决方法 尝试将其作为一个三步过程:

kill(-pID,SIGStop);kill(-pID,SIGTERM);kill(-pID,SIGCONT);

第一个SIGStop应该将所有进程置于停止状态.他们无法捕获此信号,因此这应该会停止整个流程组.

SIGTERM将排队等待进程,但我不相信它会被交付,因为进程已停止(这是来自内存,我目前无法找到引用,但我相信它是真的).

SIGCONT将再次启动流程,允许交付SIGTERM.如果从机首先获得SIGCONT,则主机可能仍然停止,因此它不会注意到从机离开.当主服务器获得SIGCONT时,它将跟随SIGTERM,终止它.

我不知道这是否真的有效,并且可能是实现取决于所有信号何时实际传递(包括SIGCHLD到主进程),但它可能值得一试.

总结

以上是内存溢出为你收集整理的linux – 我是否应该担心订单过程中的流程接收信号?全部内容,希望文章能够帮你解决linux – 我是否应该担心订单过程中的流程接收信号?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1025271.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存