【发布时间】:2014-05-21 12:49:24
【问题描述】:
我有一个环境变量,允许一套应用程序在某些条件下运行,而应用程序无法在环境变量关闭的情况下运行。
我的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。
我从 cmets 学到的是,实际发生的情况是我调用的子进程是一个启动器,它调用另一个应用程序的子进程。我的子进程总是运行,但是在环境变量关闭的情况下,子应用程序不会运行。有没有办法查看孩子是否在跑步?
【问题讨论】:
-
“小流程”是什么意思?如果能找到
pid,说明程序存在并且正在运行,对吧? -
您可以使用
p.terminate()停止子进程并使用p.poll()检查它是否仍在运行。 -
@Evert 你是对的。我猜实际发生的情况是我调用的子进程是一个启动器,它调用一个子进程,它是另一个应用程序。我的子进程总是运行,但是在环境变量关闭的情况下,子应用程序不会运行。有没有办法查看孩子是否在跑步?
-
听起来你想要
ps之类的东西,假设这些子进程具有唯一的名称。否则,如果启动进程没有跟踪孩子,我认为所有的赌注都没有(你可以搜索孤儿进程,但可能有很多)。 -
我会调查
ps。对于我测试过的所有情况,子应用程序的进程 ID 总是比子进程多一个。这种情况会一直如此吗?或者这是一种愚蠢的检查方式
标签: python linux subprocess