在POSIX系统中,我想查看给定的进程(例如PID 4356)是否正在运行。如果我能获得有关该过程的元数据会更好。
答案 0 :(得分:11)
代替os.waitpid,你也可以使用os.kill和信号0:
>>> 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变种。
答案 1 :(得分:4)
在Linux上至少/ proc目录中有你想要的东西。它基本上是来自内核的系统数据,表示为目录和文件。所有数字目录都是进程的详细信息。只需使用基本的python os函数来获取这些数据:
#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]
答案 2 :(得分:3)
以便携方式,使用psutil(https://github.com/giampaolo/psutil)
>>> import psutil, os
>>> psutil.pid_exists(342342)
False
>>> psutil.pid_exists(os.getpid())
True
>>>
答案 3 :(得分:1)
看看/proc/pid
。这仅存在于进程正在运行,并且包含大量信息。
答案 4 :(得分:0)
os.waitpid()
可能有所帮助:
try:
os.waitpid(pid, 0)
except OSError:
running = False
else:
running = True
答案 5 :(得分:0)
获取信息的一种方法是:
import commands
output = commands.getstatusoutput("ps -ef | awk '{print $2}' | grep MYPID")
请参阅:http://docs.python.org/library/commands.html
我想:
commands.getoutput(...)
可用于获取“ps
”行上的元数据。由于您使用的是POSIX系统,我想ps
(或等效)可用(例如Solaris下的prstat
)。