终止子 shell 进程但向父进程发送 0 响应代码

终止子 shell 进程但向父进程发送 0 响应代码

研究一个 python 项目,该项目是为企业设置一个非常大的远程集群而创建的(目前不支持恢复/幂等功能)。

在运行 python 脚本时,如果在任何时候 shell/ssh 命令挂起,我想手动运行该命令,并在成功完成后我想杀死挂起的子进程。仅当父进程从子进程获得成功响应代码时才会继续(无法编辑 python 脚本代码)。

示例代码:

import subprocess

try:
    response = subprocess.run(["sleep 300;"], shell=True)
    print('return code: ' + str(response.returncode))
    response.check_returncode()
    print('Command completed successfully.')
except Exception as e:
    print('Error occoured: ' + str(e))

杀死孩子:

% ps -ef | grep sleep
  501  6904  6719   0 11:45AM ttys006    0:00.03 [email protected]/.../Python bash_sleep.py
  501  6905  6904   0 11:45AM ttys006    0:00.00 sleep 300
% kill -15 6905

最终回应:

% python3 bash_sleep.py
return code: -15
Error occoured: Command '['sleep 300;']' died with <Signals.SIGTERM: 15>.

有什么方法可以杀死子 shell 进程但向 python 进程发送 0 响应代码?

答案1

你不能用 来做到这一点kill,但如果你可以附加一个调试器,你可以使用它“很好地”退出挂起的进程:

$ python3 bash_sleep.py

在另一个航站楼...

$ gdb --pid ${the sleep pid}
>>> call exit(0)
>>> quit

这将导致目标进程退出,并向其父进程返回 0。它还将调用在 C 库中注册的任何退出处理程序。

相关内容