Подтвердить что ты не робот

Библиотека Python для управления процессами Linux

Через мой веб-интерфейс я хотел бы запустить/остановить определенные процессы и определить, запущен ли процесс.

Мой существующий веб-сайт основан на Python и работает на сервере Linux, так что вы знаете подходящую библиотеку, которая поддерживает эту функциональность?

Спасибо

4b9b3361

Ответ 1

Для запуска/остановки подпроцессов python вы можете использовать модуль подпроцесса. Чтобы проверить, работают ли они, вы можете использовать psutil:

>>> import psutil
>>> pid = 1034  # some pid
>>> psutil.pid_exists(pid)
True
>>>

... или это (он также проверяет, был ли PID повторно использован):

>>> p = psutil.Process(pid)
>>> p.is_running()
True
>>>

Ответ 2

Проверка списка запущенных процессов выполняется (даже с помощью основных утилит типа "ps" ), просматривая содержимое каталога /proc.

Таким образом, библиотека, которую вы заинтересованы в запросе запущенных процессов, такая же, как и для работы с любыми другими файлами и каталогами (например, sys или os), в зависимости от вкуса, которым вы пользуетесь. внимание к os.path, хотя оно делает большую часть того, что вам нужно). Чтобы прекратить или иным образом взаимодействовать с процессами, вы отправляете им сигналы, которые выполняются с помощью os.kill. Наконец, вы начинаете новые процессы с помощью os.popen и друзей.

Ответ 3

Поскольку вы сказали, что это сервер Linux, вызов внешнего двоичного файла ps обычно медленнее, он использует больше ресурсов и больше подвержен ошибкам, чем использование информации из /proc напрямую.

Поскольку никто не упомянул, один простой способ:

glob.glob('/proc/[0-9]*/')

Удачи.

Ответ 4

Это то, что я использую. Он использует procfs (так что вы ограничены Unix-системами, не будете работать на macs, я думаю) и ранее упомянутый glob. Он также получает cmdline, который позволяет вам идентифицировать процесс. Для уничтожения процесса вы можете использовать os.kill(signal.SIGTERM, pid). Для использования подпроцесса, пожалуйста, отметьте это сообщение Python, Popen и выберите - ожидающий завершения процесса или тайм-аута

def list_processes():
    """
    This function will return an iterator with the process pid/cmdline tuple

    :return: pid, cmdline tuple via iterator
    :rtype: iterator

    >>> for procs in list_processes():
    >>>     print procs
    ('5593', '/usr/lib/mozilla/kmozillahelper')
    ('6353', 'pickup -l -t fifo -u')
    ('6640', 'kdeinit4: konsole [kdeinit]')
    ('6643', '/bin/bash')
    ('7451', '/usr/bin/python /usr/bin/ipython')
    """
    for pid_path in glob.glob('/proc/[0-9]*/'):

        # cmdline represents the command whith which the process was started
        f = open("%s/cmdline" % pid_path)
        pid = pid_path.split("/")[2] # get the PID
        # we replace the \x00 to spaces to make a prettier output from kernel
        cmdline = f.read().replace("\x00", " ").rstrip()
        f.close()

        yield (pid, cmdline)

Ответ 5

Модуль os, вероятно, ваш друг. Там os.kill, например, чтобы убить процесс.

Что касается получения списка процессов, вы, вероятно, захотите выполнить команду ps. Этот вопрос содержит дополнительную информацию.

Ответ 6

Подпроцесс Python http://docs.python.org/library/subprocess.html может вам помочь. Если вы создаете процесс с подпроцессом, вы можете использовать функцию Popen.terminate(), чтобы остановить его.

Ответ 7

Я бы использовал PSutil. Чтобы обеспечить практический пример:

import psutil

for proc in psutil.get_process_list():
    if proc.username == 'yourusername':
        if myappname in proc.cmdline:
            print 'App is running'

В качестве альтернативы Red Hat использует и поддерживает модуль Python под названием python-linux-procfs, который изначально анализирует /proc для управления процессами. он не очень хорошо рекламируется, но предоставляет некоторые дополнительные специфичные для Linux функции (например, класс планирования), которые иногда полезны.

http://pkgs.fedoraproject.org/gitweb/?p=python-linux-procfs.git