使用Python检查Linux中子进程是否正在运行
我有一个环境变量,它可以让一组应用程序在特定条件下运行,而这些应用程序在环境变量关闭时是无法运行的。
我的 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()
。