GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Python-Bibliothek für das Linux-Prozessmanagement

Da Sie sagten, dass dies ein Linux-Server ist, rufen Sie den externen ps auf Binary ist normalerweise langsamer, verbraucht mehr Ressourcen und ist fehleranfälliger als die Verwendung der Informationen aus /proc direkt.

Da sonst niemand erwähnt hat, gibt es einen einfachen Weg:

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

Viel Glück.


Um Python-Unterprozesse zu starten/stoppen, können Sie das Unterprozessmodul verwenden. Um zu überprüfen, ob sie ausgeführt werden, können Sie psutil verwenden:

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

...oder dies (es wird auch prüfen, ob die PID wiederverwendet wurde):

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

Das ist, was ich benutze. Es verwendet procfs (Sie sind also auf Unix-ähnliche Systeme beschränkt, werden meiner Meinung nach nicht auf Macs funktionieren) und den zuvor erwähnten Glob. Es erhält auch die cmdline, mit der Sie den Prozess identifizieren können. Zum Beenden des Prozesses können Sie os.kill(signal.SIGTERM, pid) verwenden . Für die Verwendung von Unterprozessen lesen Sie bitte diesen Beitrag Python, Popen und wählen Sie - Warten auf die Beendigung eines Prozesses oder eine Zeitüberschreitung

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)

Die Überprüfung der Liste der laufenden Prozesse erfolgt (selbst mit Kerndienstprogrammen wie "ps"), indem der Inhalt des /proc-Verzeichnisses betrachtet wird.

Daher ist die Bibliothek, die Sie zum Abfragen laufender Prozesse interessieren, die gleiche, die zum Arbeiten mit anderen Dateien und Verzeichnissen verwendet wird (z. B. sys oder os , je nach gewünschtem Geschmack. Achten Sie besonders auf os.path obwohl es das meiste von dem tut, wonach Sie suchen). Um Prozesse zu beenden oder anderweitig mit ihnen zu interagieren, senden Sie ihnen Signale, was mit os.kill erreicht wird . Schließlich starten Sie neue Prozesse mit os.popen und Freunde.


Linux
  1. Verwenden von AppImage für die Linux-Paketverwaltung

  2. So packen Sie Python-Anwendungen für Linux

  3. 8 Linux-Befehle für effektives Prozessmanagement

  4. Linux Command Basics:7 Befehle für das Prozessmanagement

  5. 30 Übungen zu Linux-Prozessen für Systemadministratoren

Linux-Prozessverwaltung mit htop verbessert

bpython – Ein schicker Python-Interpreter für Linux

So installieren Sie die PyBrain-Python-Bibliothek unter Linux

So installieren Sie Setuptools für Python unter Linux

Befehle für das Prozessmanagement in Linux

Top 10+ der besten Bibliotheksverwaltungssoftware für Linux-Systeme