python – 扭曲的程序和TERM信号
我有一个简单的例子: from twisted.internet import utils,reactor def test: utils.getProcessOutput(executable="/bin/sleep",args=["10000"]) reactor.callWhenRunning(test) reactor.run() 当我向程序发送信号“TERM”时,继续执行“睡眠”,当我按下键盘上的Ctrl-C“睡眠”停止时. (Ctrl-C不等同于信号TERM?)为什么?如何在向该程序发送信号“TERM”后杀死“睡眠”? 最佳答案
Ctrl-C将SIGINT发送到整个前台进程组.这意味着它将被发送到您的Twisted程序和sleep子进程.
如果你想在Python进程退出时终止进程,那么你可能需要一个before shutdown触发器:
在编写示例代码时,killSleep很难实现. getProcessOutput没有给你一些容易让孩子被杀死的东西(例如,你不知道它的pid).如果你使用reactor.spawnProcess和一个自定义ProcessProtocol,这个问题就解决了 – ProcessProtocol将连接到一个进程传输,它有一个signalProcess方法,你可以用它向你的子进程发送一个SIGTERM(或任何你喜欢的). 您也可以忽略SIGINT和此点,然后手动将其传递给整个流程组:
忽略SIGINT,因为Twisted进程已经关闭而另一个信号没有任何好处(并且可能会混淆它或至少导致报告虚假错误).向-os.getpgid(os.getpid())发送信号是如何将其发送到整个进程组的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |