Python subprocess.popen错误的pid

Python subprocess.popen错误的pid,python,linux,subprocess,pid,gnu-screen,Python,Linux,Subprocess,Pid,Gnu Screen,我正试图用Python编写一个监控游戏服务器的程序。 为此,n需要查看在屏幕会话中启动的gameserver进程是否仍在运行,为此,我需要它的pid,但是,我没有得到屏幕会话的pid,我得到的pid只在popen会话激活之前存在。屏幕会话的pid比pid popen的高一个pid。pid方法返回。我知道这可能是由shell=True引起的,但我使用shell=False运行它。在screen进程中获取screen进程/gameserver的pid有什么干净的方法吗?我唯一的另一个解决方案就是编写

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

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

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

提前感谢。

您的问题不在于python,而在于屏幕

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


这是您在ps调用中看到的另一个过程

有没有获得pid的干净方法的解决方案?或者可以只取.pid+1?似乎没有一种干净的方法来获取它,但是,我假设屏幕是以这种方式确定的,因此如果最终进程是+1,那么您可以计算它将是+1 99%的时间,如果其他进程在附近,可能会出现关于该数字的竞争条件。好的,谢谢:这样做,或者用screen-ls获取pid