如何解决将信号转发到使用Popen创建的子进程
我有一个Python程序,它是任意(即非Python)程序的薄包装。包装器使用Popen启动包装的程序。
但是,有时包装的程序会忽略诸如SIGINT
或SIGTERM
之类的信号。结果是,当包装程序正在运行这样的程序并收到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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。