Что состоит в том, чтобы видеть самый легкий путь, существует ли процесс с данным pid в Python?

7
задан Josh Gibson 17 June 2009 в 09:12
поделиться

5 ответов

Вместо 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, который я пробовал.

11
ответ дан 6 December 2019 в 10:02
поделиться

В 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]
4
ответ дан 6 December 2019 в 10:02
поделиться

os.waitpid () может помочь:

try:
    os.waitpid(pid, 0)
except OSError:
    running = False
else:
    running = True
0
ответ дан 6 December 2019 в 10:02
поделиться

Посмотрите на / proc / pid . Он существует только для запущенного процесса и содержит много информации.

1
ответ дан 6 December 2019 в 10:02
поделиться

Один из способов сделать это для получения информации:

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).

0
ответ дан 6 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: