将信号处理委托给python中的子进程



如何从python脚本运行命令并将Ctrl+C等信号委托给它?

我的意思是当我运行时,例如:

from subprocess import call
call(["child_proc"])

我想让child_proc处理Ctrl+C

我猜你的问题是,你希望子进程接收Ctrl-C,而不是有父Python进程终止?如果子进程为Ctrl-C (SIGINT)初始化了自己的信号处理程序,那么这可能会奏效:

import signal, subprocess
old_action = signal.signal(signal.SIGINT, signal.SIG_IGN)
subprocess.call(['less', '/etc/passwd'])
signal.signal(signal.SIGINT, old_action)         # restore original signal handler

现在你可以按Ctrl-C(生成SIGINT), Python将忽略它,但less仍然会看到它。

然而,这只有在子进程正确设置了它的信号处理程序时才有效(否则这些处理程序将从父进程继承)。

相关内容

  • 没有找到相关文章

最新更新