我有一个环境变量,允许一组应用程序在特定条件下运行,并且应用程序无法在关闭环境变量的情况下运行。
我的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
。
我从评论中学到的是,实际发生的事情是我调用的子进程是一个调用子进程的启动器,这是另一个应用程序。我的子进程总是运行,但关闭环境变量后,子应用程序不会运行。有没有办法看孩子是否在跑?
答案 0 :(得分:3)
您可以使用p.poll()
检查进程是否仍在运行。
另一个问题是os.kill无法正常工作,我发现终止应用程序的唯一方法是os.killpg。
如果要终止使用子流程启动的流程,可以使用p.terminate()
。
最后,如果你想等待直到进程子项死亡,你可以使用p.wait()
。