在Python代码中获取进程ID

18 投票
4 回答
38767 浏览
提问于 2025-04-17 00:47

我在Windows系统上,假设我有一个主要的Python代码,它通过命令行调用Python解释器来执行另一个Python脚本,比如说test.py。

所以,test.py是作为一个新进程被执行的。我该如何在Python中找到这个进程的ID呢?

更新:

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

如果我有一个主程序,它运行Python解释器来执行另一个脚本,我该如何获取正在执行的那个脚本的进程ID呢?

4 个回答

0

当你创建一个新进程时,你会得到这个新进程的ID。至少,如果你使用了fork()(在Unix系统中)、posix_spawn()、CreateProcess()(在Win32系统中)或者其他合理的方法来创建进程,你都会得到这个ID。

如果你运行“python”这个程序,那么这个python的进程ID就是你运行的这个程序的ID。它不会自己再创建一个子进程(除非你的python代码里有这样的操作)。

7

这完全取决于你是怎么启动第二个进程的。

如果你使用的是 os.system 或类似的方法,这个调用不会返回关于子进程的有用信息,比如它的进程ID。一个选择是让你的第二个脚本通过标准输入/输出把 os.getpid() 的结果传回原来的进程,或者把结果写到一个预定的文件里。另一个选择是使用第三方的 psutil 库来找出这个进程是什么。

另一方面,如果你使用 subprocess 模块来启动脚本,得到的 "popen" 对象有一个属性 popen.pid,这个属性会告诉你进程的ID。

21

如果你使用了subprocess来启动一个新的命令行窗口,你可以在pid这个属性里找到进程的ID:

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

如果你使用了multiprocessing,那就要用它的pid属性:

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

撰写回答