preexec_fn 参数来帮助我:
如果将 preexec_fn 设置为可调用对象,则将在执行子级之前在子进程中调用此对象。(仅Unix)
因此,以下代码解决了该问题(仅UNIX):
import subprocessimport signaldef preexec_function(): # Ignore the SIGINT signal by setting the handler to the standard # signal handler SIG_IGN. signal.signal(signal.SIGINT, signal.SIG_IGN)my_process = subprocess.Popen( ["my_executable"], preexec_fn = preexec_function)
注意: 实际上并没有阻止信号到达子过程。相反,上面的 preexec_fn会 覆盖信号的默认处理程序,以便忽略该信号。因此,如果子 进程
再次覆盖 SIGINT 处理程序,则此解决方案 可能 不起作用。 __
另一个注意事项:
该解决方案适用于各种子流程,即它也不限于使用Python编写的子流程。例如,我为其编写包装程序的专用服务器实际上是用Java编写的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)