【问题标题】:How do I check my subprocess is still running correctly?如何检查我的子进程是否仍在正常运行?
【发布时间】:2020-12-10 02:33:26
【问题描述】:

抱歉,我无法为此发布代码,但我一直在尝试从另一个创建系统托盘的 python 脚本运行 python 脚本。此系统托盘将显示程序是否正确运行。

到目前为止,我已经尝试了几种方法,最有希望的方法是使用类似的方法:

p = subprocess.Popen([xxx, xxx], stdout=PIPE, stderr=PIPE) 

然后我检查stderr 是否有任何输出意味着出现错误。

但是,这仅在我故意发生错误(使用错误的文件路径)时有效,并且当我使用正确的文件路径时没有任何反应,因为程序永远不会终止。

所以我遇到的主要问题是因为我希望程序始终运行,除非出现错误,否则它永远不会终止。我希望能够检查它是否正在运行,以便用户可以检查系统托盘上的状态。

【问题讨论】:

  • p.poll() 如果子进程仍在运行,则返回 None,否则返回退出代码。
  • 查看Popen.poll() 文档。

标签: python subprocess stdout stderr tray


【解决方案1】:

在 Unix 操作系统中,我们使用某些系统调用来进行进程管理。该进程在其父进程执行 fork 系统调用时启动。然后,父进程可以wait() 让子进程通过使用exit() 系统调用正常终止,或者由于致命异常或信号而异常终止(例如, SIGTERM, SIGINT, SIGKILL),退出状态返回给操作系统,并向父进程发送一个 SIGCHLD 信号。然后,父进程可以通过等待系统调用检索退出状态,以了解实际发生的情况。干杯

【讨论】:

    猜你喜欢
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多