【问题标题】:Python subprocess how to determine if child process hangs?Python子进程如何确定子进程是否挂起?
【发布时间】:2011-04-13 01:27:02
【问题描述】:

我怎么知道我的子进程在运行时是否挂起?

【问题讨论】:

    标签: python process subprocess parent-child


    【解决方案1】:

    我猜,你是在问,如何发现子进程在运行时是否挂起。你不能轻易说出来。进程可能正在执行长时间运行的操作。上下文对于了解进程何时挂起很重要。

    如果您希望某个进程响应用户输入并且长时间没有响应,那么我们认为它已挂起。进程正在运行可能正在等待一些永远不会发生的事情。 “Hung Process”是人类的说法,即程序已经走到了死胡同,将不再有用。

    你可以让一个程序一个接一个地计算素数,并且可以运行无数个,不能称为挂起的进程。

    【讨论】:

    • 好的。首先我们可以设置默认超时,然后在需要时终止进程。这是真的吗?
    • 是但默认超时只能由用户在上下文中确定。正如我在回复中提到的,如果您正在计算大素数,可能会花费很多时间。因此,上下文是根据程序正在做什么以及对其结论的合理猜测来确定的。
    • 我尝试使用浏览器的核心在子进程中渲染一些内容。
    【解决方案2】:

    那么,您如何区分卡住的流程和需要比平时更长的时间才能完成的流程?简短的回答是:不,您无法检测到您的子进程是否被卡住。

    我想说,为了能够检测到这一点,您需要与进程进行某种持续的通信(例如查看日志文件、IPC 或类似文件)。根据这种交流,您可能能够判断进程何时以及是否卡住。

    【讨论】:

    • 在嵌套子进程的情况下如何使用通信?我在子流程中选择一些模块并使其成为自己的子流程的原因。
    • 每个进程都有一个父进程,嵌套的子进程有它们的父进程。如回复中所述创建管道(IPC)。在进程之间从这些写入和接收,当它们被破坏并且您无法从它们读取和写入时,您可以认为进程挂起。
    • 从现在开始我会关心 IPC。谢谢!
    • 如果父进程认为子进程仍在工作,而子进程只是休眠或挂起,该怎么办?
    猜你喜欢
    • 2017-02-28
    • 2012-09-07
    • 2015-07-07
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多