gpt4 book ai didi

python - 当父进程在 python 中崩溃时杀死子进程

转载 作者:太空狗 更新时间:2023-10-29 17:42:27 25 4
gpt4 key购买 nike

我正在尝试编写一个 python 程序来测试用 C 编写的服务器。python 程序使用 subprocess 模块启动已编译的服务器:

pid = subprocess.Popen(args.server_file_path).pid

这工作正常,但是如果 python 程序由于错误而意外终止,生成的进程将继续运行。我需要一种方法来确保如果 python 程序意外退出,服务器进程也会被终止。

更多细节:

  • 仅限 Linux 或 OSX 操作系统
  • 服务器代码不能以任何方式修改

最佳答案

我会 atexit.register终止进程的函数:

import atexit
process = subprocess.Popen(args.server_file_path)
atexit.register(process.terminate)
pid = process.pid

或者也许:

import atexit
process = subprocess.Popen(args.server_file_path)
@atexit.register
def kill_process():
try:
process.terminate()
except OSError:
pass #ignore the error. The OSError doesn't seem to be documented(?)
#as such, it *might* be better to process.poll() and check for
#`None` (meaning the process is still running), but that
#introduces a race condition. I'm not sure which is better,
#hopefully someone that knows more about this than I do can
#comment.

pid = process.pid

请注意,如果您做了一些令人讨厌的事情导致 python 以非优雅的方式死亡(例如通过 os._exit 或如果您导致 SegmentationFaultBusError)

关于python - 当父进程在 python 中崩溃时杀死子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14128410/

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