如何判断一个程序是否与子进程崩溃?

5 投票
3 回答
8392 浏览
提问于 2025-04-16 09:16

我的应用程序会创建一些子进程。通常情况下,这些进程运行完毕后会正常结束,但有时候它们会崩溃。

我现在使用的是Python的subprocess模块来创建这些子进程。我通过调用Popen.poll()方法来检查子进程是否崩溃。不幸的是,由于在崩溃时我的调试器是开启的,所以这个方法没有返回我预期的结果。

我希望能够看到调试窗口(不想关闭它),同时还能够在Python代码中检测到进程是否崩溃。

有没有办法做到这一点呢?

3 个回答

0

需要考虑的事项:

可以使用subprocess.check_output()来获取你子进程的返回代码。
可以用psutil来分析进程和子进程(还有更多功能)。
可以使用threading库来监控这些子进程的状态,一旦你决定了如何处理崩溃的情况。

import psutil
myprocess = psutil.Process(process_id) # you can find your process id in various ways of your choosing
for child in myprocess.children():
    print("Status of child process is: {0}".format(child.status()))

你还可以使用threading库把你的子进程放到一个单独的线程中,这样就可以和其他进程同时进行psutil的分析。

如果你发现了更多的内容,告诉我一声,我发现这篇帖子可不是偶然。

2

当你的调试工具打开时,程序还没有结束,而 subprocess 只知道一个程序是正在运行还是已经结束。所以,不能通过 subprocess 来实现这个功能。

2

我找到了解决这个问题的办法。我用了另一个问题中提供的解决方案,链接是“应用程序错误”对话框可以被禁用吗?

撰写回答