您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python:如何防止子进程接收CTRL-C / Control-C / SIGINT

Python:如何防止子进程接收CTRL-C / Control-C / SIGINT

preexec_fn 参数来帮助我:

如果将 preexec_fn 设置为可调用对象,则将在执行子级之前在子进程中调用此对象。(仅Unix)

因此,以下代码解决了该问题(仅UNIX):

import subprocess
import signal

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

python 2022/1/1 18:47:05 有434人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶