从python启动多个二进制文件并监视它们的状态

start multiple binaries from python and monitor their status

本文关键字:监视 状态 二进制文件 python 启动      更新时间:2023-10-16

我有几个可执行的c++二进制文件,我需要从python脚本开始。根据这些可执行文件的状态,脚本将执行一些操作。比方说,我启动了4个独立的程序,它们都在运行。我的脚本需要确保这4个程序运行愉快,没有崩溃。如果是这样,脚本将发送一封电子邮件,其中包含"此时进程XYZ失败"

的信息。

我在Linux机器上。我尝试了子进程技巧的各种组合,但没有成功。我想我可能需要利用线程并在它启动的进程上保持一个"看门狗"。理想情况下,脚本需要在单独的终端窗口中启动这些程序,因此总共有4个终端窗口。下面是我的尝试:

import subprocess as sp
clear = sp.call('clear')
try:
    comm = sp.Popen(['xterm', '-e', '~/stuff/comm'])
    while sp.Pipe == -1:
         ...do stuff
except sp.PIPE == -2:
    ...send email.

上述方法的问题是,如果我杀死脚本启动的程序,脚本不会意识到它已被杀死。

啊,大脑是油炸的,我会试着添加更多连贯的信息以后,但如果有人已经知道我想要完成什么,我将非常感激它。

由于您是在Linux机器上,因此可以使用信号,特别是SIGCHLD。当父进程的任何一个子进程死亡时,该信号被发送给父进程。默认的操作是忽略它,所以您需要安装一个处理程序来处理它:

import os
import signal
def sigchld(sig, frame):
    (pid, r) = os.wait()
    print pid, "exited with", ("signal %d" % (r & 0x7f) if os.WIFSIGNALED(r) else "exit code %d" % (r >> 8))
signal.signal(signal.SIGCHLD, sigchld)
# run your subprocesses here