Python:如何防止子进程接收CTRL-CControl-CSIGINT

Python:如何防止子进程接收CTRL-CControl-CSIGINT,第1张

Python:如何防止子进程接收CTRL-C / Control-C / SIGINT python IRC-Channel(Freenode)中的某人通过指出 subprocess.Popen (…)

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编写的。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5661593.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存