Python subprocess.popen错误的pid

时间:2014-09-18 14:14:59

标签: python linux subprocess pid gnu-screen

我试图编写一个用Python监控游戏服务器的程序。 为此,我需要查看在屏幕会话中启动的游戏服务器的进程是否仍在运行,为此,我需要它的pid,但是,我没有得到pid屏幕会话,我得到一个pid,只有在popen会话激活时才存在。屏幕会话的pid比pid popen的.pid()方法返回的pid高一个pid。我知道这可能是通过shell = True引起的,但是我用shell = False运行它。在屏幕进程中获取屏幕进程/游戏服务器的pid的任何干净方法?我唯一的另一个解决方案是编写.pid()+ 1,但我想这将是一个可怕的解决方法。

以下是我的代码的相关部分:

proc = Popen(["screen", "-dmS", self.name, "./srcds_run", "-port", str(self.port), "-game", self.modDir], shell=False)

提前致谢。

1 个答案:

答案 0 :(得分:0)

你的问题不在于python,而在于屏幕。

当您使用-dmS启动屏幕并进入后台时,它会自行执行一些分叉和执行,因此,如果您使用strace检查系统调用,则会看到新的PID,您将看到如何执行屏幕二进制文件您可以看到返回的PID,稍后执行其他进程并完成。

这是您在ps来电

中看到的其他流程