在Python中,如何简单检查给定pid的进程是否存在?
在一个POSIX系统中,我想检查一个特定的进程(比如说,进程ID是4356)是否正在运行。如果能获取到这个进程的更多信息就更好了。
6 个回答
3
可以通过使用 psutil 这个库来以一种便携的方式实现,psutil 的地址是 https://github.com/giampaolo/psutil。
>>> import psutil, os
>>> psutil.pid_exists(342342)
False
>>> psutil.pid_exists(os.getpid())
True
>>>
4
在Linux系统中,/proc目录里有你需要的信息。这个目录其实是内核提供的系统数据,以文件和文件夹的形式展示出来。所有以数字命名的文件夹都是关于进程的详细信息。你只需要用一些基本的Python操作系统函数就可以获取这些数据:
#ls /proc
1 17 18675 25346 26390 28071 28674 28848 28871 29347 590 851 874 906 9621 9655 devices iomem modules ...
#ls /proc/1
auxv cmdline cwd environ exe fd maps mem mounts root stat statm status task wchan
#cat /proc/1/cmdline
init [3]
11
你可以用 os.kill 搭配信号 0 来代替 os.waitpid:
>>> os.kill(8861, 0)
>>> os.kill(12765, 0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OSError: [Errno 3] No such process
>>>
补充说明:更详细一点:
import errno
import os
def pid_exists(pid):
try:
os.kill(pid, 0)
except OSError, e:
return e.errno == errno.EPERM
else:
return True
在我的 Linux 电脑上,这个方法很好用。我没有确认“信号 0”是否真的是 Posix 标准,但在我尝试过的每个 Unix 版本上都能正常工作。