Как проверить, выполняет ли процесс все еще использование Python на Linux? [дубликат]

Этот вопрос уже имеет ответ здесь:

Единственным хорошим путем я нашел:

import sys
import os

try:
        os.kill(int(sys.argv[1]), 0)
        print "Running"
except:
        print "Not running"

(Источник)
Но действительно ли это надежно? Это работает с каждым процессом и каждым распределением?

35
задан jww 19 September 2019 в 07:11
поделиться

4 ответа

Ответ Mark's является способом пойти, в конце концов, вот почему,/proc файловая система там. Для чего-то немного больше copy/pasteable:

 >>> import os.path
 >>> os.path.exists("/proc/0")
 False
 >>> os.path.exists("/proc/12")
 True
51
ответ дан Aaron Maenpaa 27 November 2019 в 06:28
поделиться

на Linux можно посмотреть в каталоге $PID/proc/для получения информации о том процессе. На самом деле, если каталог существует, процесс работает.

28
ответ дан Mark Harrison 27 November 2019 в 06:28
поделиться

Это должно работать над любой системой POSIX (хотя смотря /proc файловая система, как другие предположили, легче, если Вы знаете, что это будет там).

Однако: os.kill может также перестать работать, если у Вас нет разрешения сигнализировать о процессе. Необходимо было бы сделать что-то как:

import sys
import os
import errno

try:
    os.kill(int(sys.argv[1]), 0)
except OSError, err:
    if err.errno == errno.ESRCH:
        print "Not running"
    elif err.errno == errno.EPERM:
        print "No permission to signal this process!"
    else:
        print "Unknown error"
else:
    print "Running"
12
ответ дан dF. 27 November 2019 в 06:28
поделиться

//, Но действительно ли это надежно? Это работает с каждым процессом и каждым распределением?

Да, это должно работать над любым дистрибутивом Linux. Знайте, что/proc не легко доступен в основанных на Unix системах, хотя (FreeBSD, OSX).

6
ответ дан jww 27 November 2019 в 06:28
поделиться
Другие вопросы по тегам:

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