获取在另一个终端中执行的python进程的状态

时间:2016-06-10 00:50:09

标签: python linux terminal subprocess popen

我有一个python程序,它将在新终端中创建并执行另一个python脚本。为此,我正在使用subprocess.Popen。我正在尝试使用.pid来获取新进程的PID。但是,此pid的值似乎与新创建的进程的实际pid不匹配(两个值不匹配)。

以下是我的代码示例:

from subprocess import Popen

p = Popen("gnome-terminal -e 'python'",shell = True)
print p.pid

在新开的终端,我尝试使用以下方式获取pid:

import os
print os.getpid()

我有两个不同的价值观。有谁知道如何获得正确的pid?我需要知道第二个过程何时完成才能在第一个过程中执行操作。

感谢您的帮助!

如果您需要更多详情,请告诉我们:)

2 个答案:

答案 0 :(得分:0)

根据documentation

如果将shell参数设置为True,则这是生成的shell的进程ID。

所以你需要shell=False

答案 1 :(得分:0)

  

但是,此pid的值似乎与新创建的进程的实际pid相匹配(这两个值不匹配)。

此处有三个进程:shell=True导致/bin/sh运行gnome-terminal运行python(可能是间接的)。 gnome-terminal可能只是一个启动程序,它将python委托给正在运行的服务器进程并退出。

shell=False在这里没有帮助。你将获得gnome-terminal的pid而不是/bin/sh - 你不会得到python进程' PID。

您可以在已知文件中编写pid或通过管道/套接字进行通信。