python - 使用 Python 检查子进程是否在 Linux 中运行

标签 python linux subprocess

我有一个环境变量,允许一组应用程序在特定条件下运行,并且应用程序无法在环境变量关闭的情况下运行。

我的Python脚本使用

p = subprocess.Popen(cmdStr3,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)

打开子进程。

为了测试应用程序是否正在运行,我已经尝试过

try:
    os.kill(pid, 0)
    return True
except OSError:
    return False

并检查p.returncode。然而,这些总是返回 true,因为即使应用程序没有在屏幕上显示,仍有约 1 MB 的迷你进程在应用程序完全运行的情况下运行,因此操作系统会看到这些并返回 true。有办法解决这个问题吗?

另一个问题是 os.kill 不起作用,我发现终止应用程序的唯一方法是最后的 os.killpg

我从评论中了解到,实际发生的情况是,我调用的子进程是一个启动程序,它调用另一个应用程序的子进程。我的子进程始终运行,但在环境变量关闭的情况下,子应用程序不会运行。有没有办法查看 child 是否在运行?

最佳答案

您可以使用p.poll()检查进程是否仍在运行。

Another issue is that os.kill doesn't work, the only way I have found to terminate the application is os.killpg at the end.

如果你想终止使用子进程启动的进程,可以使用 p.terminate() .

最后,如果您想等待直到子进程死亡,您可以使用 p.wait() .

关于python - 使用 Python 检查子进程是否在 Linux 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23783678/

相关文章:

linux - 我的信号量模块没有正常工作(餐饮哲学家)

go - golang程序退出后如何保持子进程运行?

python - 如何使用所有CPU对大文件列表进行子处理?

python - 将嵌套的json转换成没有嵌套对象的字典格式

linux - 使用 `-s` 以特定的 bash 命令格式安装 RVM

python - 在保留布局的同时更改 XML

linux - 如何将一堆文件中的每一行 X 行复制到另一个文件?

c# - 为什么当 StartInfo.RedirectStandardInput 设置为 true 时 StandardOutput.Read() 会阻塞?

Python Pandas : get max index within groupby object?

python - 生成树分解的算法