如何检查子流程仍在正常运行?

问题描述

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

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

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

然后,我检查stderr是否有任何输出,表示有错误。

但是,这仅在我故意使错误发生(使用错误的文件路径)时有效,而当我使用正确的文件路径时却什么也没有发生,因为程序永不终止。

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

解决方法

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...