微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将信号转发到使用Popen创建的子进程

如何解决将信号转发到使用Popen创建的子进程

我有一个Python程序,它是任意(即非Python)程序的薄包装。包装器使用Popen启动包装的程序。

但是,有时包装的程序会忽略诸如SIGINTSIGTERM之类的信号。结果是,当包装程序正在运行这样的程序并收到CTRL-C时,仅包装程序被杀死,而被包装的程序继续运行。

是否可以让包装器捕获任何信号,然后将其“转发”给包装的程序?

我可以在包装器中使用更atexit.register这样更复杂的东西,以在包装器终止时终止子进程,但是我认为转发信号可能更干净?

解决方法

您可以尝试这样的事情

import subprocess
import signal

wrapped_proc = subprocess.Popen(...)

def signal_handler(signum,frame):
    wrapped_proc.send_signal(signum)
    # anything else

signal.signal(signal_handler,signal.SIGINT)

链接到signal documentation

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。