gpt4 book ai didi

python 转发 SIGINT 到子进程

转载 作者:太空宇宙 更新时间:2023-11-04 01:50:32 25 4
gpt4 key购买 nike

这是一个生成进程的简单 Python 脚本:

import subprocess
import os

subprocess.run(['ping', '-i', '30', 'google.fr'],
preexec_fn=lambda : os.setpgrp())

当我 kill -TERM <python-pid> , 它停止了 python过程,但是 ping进程继续运行:这正是我所期待的。

但是当我kill -INT <python-pid> , 两者 pythonping进程停止。这不同于 CTRL-V发送 SIGINT到过程组,而不仅仅是过程。无论如何,setpgrp制作 ping进程成为自己进程组的领导者。

所以我想在 Python 代码的某处,SIGINT发送到 ping child ,但是SIGTERM不是,但是这段代码在哪里,记录在哪里?

编辑:我在 Debian 9 上运行 Python 3.6。

最佳答案

密码在subprocess.run ,你调用的函数。 SIGINT 被转换为 KeyboardInterrupt 异常,由调用 process.kill()except 子句处理.您可以使用 signal 实现对 SIGINT 的不同处理模块。值得注意的是,kill 不发送 SIGINT,而是发送 SIGKILL,因此子进程没有机会使用此默认清理执行类似的处理。

关于python 转发 SIGINT 到子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58144307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com