, кстати ..
Вместо 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, который я пробовал.
В 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]
os.waitpid ()
может помочь:
try:
os.waitpid(pid, 0)
except OSError:
running = False
else:
running = True
Посмотрите на / proc / pid
. Он существует только для запущенного процесса и содержит много информации.
Один из способов сделать это для получения информации:
import commands
output = commands.getstatusoutput("ps -ef | awk '{print $2}' | grep MYPID")
См .: http://docs.python.org/library/commands.html
Я думаю:
commands.getoutput(...)
можно использовать для получения метаданных, доступных в строке ' ps
'. Поскольку вы используете систему POSIX, я полагаю, что ps
(или эквивалент) будет доступен (например, prstat
в Solaris).