在python中将信号处理委托给子进程
如何从python脚本运行命令并将类似于在python中将信号处理委托给子进程,python,signals,subprocess,control-c,Python,Signals,Subprocess,Control C,如何从python脚本运行命令并将类似于Ctrl+C的信号委托给它 我的意思是当我跑步时,例如: from subprocess import call call(["child_proc"]) 我希望child\u proc处理Ctrl+C我猜您的问题是希望子进程接收Ctrl-C,而不是让父Python进程终止?如果您的子进程为Ctrl-C(SIGINT)初始化自己的信号处理程序,那么这可能会起到以下作用: import signal, subprocess old_action = si
Ctrl+C
的信号委托给它
我的意思是当我跑步时,例如:
from subprocess import call
call(["child_proc"])
我希望
child\u 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
仍将看到它
但是只有在子系统正确设置其信号处理程序(否则这些处理程序是从父系统继承的)的情况下,这才有效。您能更清楚地了解您想要完成的任务吗?您希望子进程做什么?请参阅我的更新question@remdezx您希望发送到父进程的信号转发给子进程,还是希望能够从父进程向子进程发送信号?我希望发送到父进程的信号转发给子进程。您可能应该设置:preexec_fn=restore_signal,其中restore_信号将SIGINT恢复为SIG_DFL。preexec_fn在子级中运行(fork()之后,exec*())之前),“否则这些信号处理程序是从父级继承的”——这是python还是unix?另外,还有关于进程信令和继承的进一步阅读链接吗?@bennlich:signal disposition的继承当然是Unix的事情——我不确定它在Windows上的实现。请使用Linux手册页作为参考,如果需要,请搜索其他资源。