在Python代码中获取ProcessId

时间:2011-08-30 21:37:10

标签: python

我在Windows中假设我有一个主python代码,它在命令行中调用python interpreter来执行另一个python脚本,比如test.py。

所以test.py作为一个新进程执行。如何在Python中找到这个porcess的processId?

更新

更具体地说,我们在os模块中有os.getpid()。它返回当前进程ID。

如果我有一个运行Python解释器的主程序来运行另一个脚本,我怎样才能获得该执行脚本的进程ID?

4 个答案:

答案 0 :(得分:20)

如果您使用subprocess生成shell,则可以在pid属性中找到进程ID:

sp = subprocess.Popen(['python', 'script.py'])
print('PID is ' + str(sp.pid))

如果您使用了多处理,请使用 pid属性:

p = multiprocessing.Process()
p.start()
# Some time later ...
print('PID is ' + str(p.pid))

答案 1 :(得分:5)

这完全取决于你如何启动第二个过程。

如果您使用os.system或类似内容,则该调用不会报告有关子进程的pid的任何有用信息。一种选择是让您的第二个脚本通过stdin / stdout将os.getpid()的结果传回原始进程,或将其写入预定的文件位置。另一种方法是使用第三方psutil库来确定它是哪个进程。

另一方面,如果您使用subprocess模块启动脚本,则生成的“popen”对象具有属性popen.pid,该属性将为您提供进程ID。

答案 2 :(得分:0)

创建新进程时,您将收到新进程的进程ID。至少,如果您使用fork()(Unix),posix_spawn(),CreateProcess()(Win32)或者可能使用任何其他合理的机制来创建它。

如果调用“python”二进制文件,则python PID将是您调用的此二进制文件的PID。它不会为自己创建另一个子进程(除非你的python代码那样做。)

答案 3 :(得分:0)

另一个选择是您执行的过程将为自己设置控制台窗口标题。 搜索过程将枚举所有窗口,按名称查找相关窗口句柄并使用句柄查找PID。它适用于使用ctypes的Windows。