Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中将信号处理委托给子进程_Python_Signals_Subprocess_Control C - Fatal编程技术网

在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

如何从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 = 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手册页作为参考,如果需要,请搜索其他资源。