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

2 投票
1 回答
12212 浏览
提问于 2025-04-18 07:12

我有一个环境变量,它可以让一组应用程序在特定条件下运行,而这些应用程序在环境变量关闭时是无法运行的。

我的 Python 脚本使用

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

来打开一个子进程。

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

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

并且还检查了 p.returncode。但是这些方法总是返回真,因为即使应用程序没有在屏幕上显示,仍然会有一些大约 1 MB 的小进程在运行,而这些进程并没有完全启动应用程序,所以操作系统会看到这些进程并返回真。有没有办法解决这个问题?

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

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

1 个回答

2

你可以使用 p.poll() 来检查这个进程是否还在运行。

还有一个问题是,os.kill 这个方法不太管用,我发现唯一能结束这个应用的方法是用 os.killpg 在最后。

如果你想结束一个通过 subprocess 启动的进程,可以使用 p.terminate()

最后,如果你想等这个子进程结束后再继续,可以使用 p.wait()

撰写回答