您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 扭曲的程序和TERM信号

5b51 2022/1/14 8:21:17 python 字数 2896 阅读 491 来源 www.jb51.cc/python

我有一个简单的例子: from twisted.internet import utils,reactor def test: utils.getProcessOutput(executable='/bin/sleep',args=['10000']) reactor.callWhenRunning(test)

概述

我有一个简单的例子:

    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”后杀死“睡眠”?

如果你想在Python进程退出时终止进程,那么你可能需要一个before shutdown触发器:

def killSleep():
    # Do it,somehow

reactor.addSystemEventTrigger('before','shutdown',killSleep)

在编写示例代码时,killSleep很难实现. getProcessOutput没有给你一些容易让孩子被杀死的东西(例如,你不知道它的pid).如果你使用reactor.spawnProcess和一个自定义ProcessProtocol,这个问题就解决了 – ProcessProtocol将连接到一个进程传输,它有一个signalProcess方法,你可以用它向你的子进程发送一个SIGTERM(或任何你喜欢的).

您也可以忽略SIGINT和此点,然后手动将其传递给整个流程组:

import os,signal

def killGroup():
    signal.signal(signal.SIGINT,signal.SIG_IGN)
    os.kill(-os.getpgid(os.getpid()),signal.SIGINT)

reactor.addSystemEventTrigger('before',killGroup)

忽略SIGINT,因为Twisted进程已经关闭而另一个信号没有任何好处(并且可能会混淆它或至少导致报告虚假错误).向-os.getpgid(os.getpid())发送信号是如何将其发送到整个进程组的.

总结

以上是编程之家为你收集整理的python – 扭曲的程序和TERM信号全部内容,希望文章能够帮你解决python – 扭曲的程序和TERM信号所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶