【问题标题】:Check if a subprocess is running in Linux using Python使用 Python 检查子进程是否在 Linux 中运行
【发布时间】: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


【解决方案1】:

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

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

如果你想杀死一个使用子进程启动的进程,你可以使用p.terminate()

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 2013-07-21
    • 2011-11-30
    • 2011-06-30
    • 1970-01-01
    相关资源
    最近更新 更多