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

时间:2014-05-21 12:49:25

标签: 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的迷你进程仍然在没有应用程序完全运行的情况下运行,因此os看到这些并返回true。有办法解决这个问题吗?

另一个问题是os.kill无法正常工作,我发现终止应用程序的唯一方法是os.killpg

我从评论中学到的是,实际发生的事情是我调用的子进程是一个调用子进程的启动器,这是另一个应用程序。我的子进程总是运行,但关闭环境变量后,子应用程序不会运行。有没有办法看孩子是否在跑?

1 个答案:

答案 0 :(得分:3)

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

  

另一个问题是os.kill无法正常工作,我发现终止应用程序的唯一方法是os.killpg。

如果要终止使用子流程启动的流程,可以使用p.terminate()

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