如何确定程序是否与子进程崩溃?

时间:2011-01-01 13:58:26

标签: python debugging subprocess popen

我的应用程序创建子进程。通常,这些过程运行和终止没有任何问题。但是,有时,它们会崩溃。

我目前正在使用python subprocess module来创建这些子进程。我通过调用Popen.poll()方法检查子进程是否崩溃。不幸的是,由于我的调试器在崩溃时被激活,因此轮询不会返回预期的输出。

我希望能够看到调试窗口(不会终止它),并且仍能检测进程是否在python代码中崩溃。

有办法做到这一点吗?

3 个答案:

答案 0 :(得分:2)

当您的调试器打开时,该过程尚未完成 - subprocess仅知道进程是否正在运行或已完成。所以不,没有办法通过subprocess来实现这一目标。

答案 1 :(得分:2)

我找到了解决此问题的方法。我使用了另一个问题Can the "Application Error" dialog box be disabled?

中给出的解决方案

答案 2 :(得分:0)

考虑事项:

subprocess.check_output()为您的子进程返回代码
psutil for process&儿童分析(以及更多)
线程库,用于监视脚本中的这些子状态,一旦您决定了如何处理崩溃,如果需要,

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()))

您还可以使用线程库将子进程加载到单独的线程中,然后与其他进程同时执行上述psutil分析。

如果您发现更多信息,请告诉我,我发现这篇文章并非巧合。