从python启动多个二进制文件并监视它们的状态
start multiple binaries from python and monitor their status
我有几个可执行的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
相关文章:
- 正在VS调试器中监视映射条目
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- OSX MetalKit CVMetalTextureCacheCreateTextureFromImage失败,状态:
- std::future_error:无关联状态
- 如何避免LED在循环状态变化中闪烁?
- boost 是否有按特殊类型值编码状态"compact optional"?
- 为什么系统函数总是在C++中返回已转移的退出状态?
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 检查两个节点在子节点上是否具有相同状态的更优雅的方法
- 将有状态的 lambda 传递到 C 样式函数中,而无需上下文参数
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 如何在Linux中监视子过程状态
- 使用win32监视Windows任务栏状态更改
- 提升:如何监视静脉静置的状态并在僵局上释放力
- 监视线程的状态
- 监视守护进程的状态
- 从python启动多个二进制文件并监视它们的状态
- 启动远程进程并监视状态