GNU/Linux >> Znalost Linux >  >> Linux

Knihovna Python pro správu procesů v Linuxu

Protože jste řekl, že se jedná o linuxový server, voláte externí ps binární je obvykle pomalejší, využívá více zdrojů a je náchylnější k chybám než použití informací z /proc přímo.

Protože nikdo jiný nezmínil, jeden jednoduchý způsob je:

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

Hodně štěstí.


Ke spuštění/zastavení dílčích procesů pythonu můžete použít modul podprocesů. Chcete-li zkontrolovat, zda běží, můžete použít psutil:

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

...nebo toto (také zkontroluje, zda bylo PID znovu použito):

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

To je to, co používám. Používá procfs (takže jste omezeni na systémy podobné Unixu, myslím, že nebude fungovat na počítačích Mac) a dříve zmíněný glob. Získá také cmdline, který vám umožní identifikovat proces. Pro ukončení procesu můžete použít os.kill(signal.SIGTERM, pid) . Chcete-li použít podproces, zkontrolujte tento příspěvek Python, Popen a vyberte - čekání na ukončení procesu nebo vypršení časového limitu

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)

Kontrola seznamu běžících procesů se provádí (dokonce i základními utilitami jako "ps") pohledem na obsah adresáře /proc.

Knihovna, kterou zajímáte pro dotazování běžících procesů, je stejná jako knihovna používaná pro práci s jakýmikoli jinými soubory a adresáři (tj. sys nebo os , v závislosti na chuti, kterou hledáte. Zvláštní pozornost věnujte os.path ačkoli dělá většinu toho, co hledáte). Chcete-li procesy ukončit nebo s nimi jinak interagovat, pošlete jim signály, což se provádí pomocí os.kill . Nakonec spustíte nové procesy pomocí os.popen a přátelé.


Linux
  1. Použití AppImage pro správu balíčků Linuxu

  2. Jak zabalit aplikace Python pro Linux

  3. Linux Command Basics:7 příkazů pro správu procesů

  1. Linux – Omezit využití paměti pro jeden linuxový proces?

  2. 10+ příkladů pro zabití procesu v Linuxu

  3. Zkontrolujte limit otevřeného FD pro daný proces v Linuxu

  1. 8 Linuxových příkazů pro efektivní řízení procesů

  2. 30 Cvičení procesů Linuxu pro systémové správce

  3. Linux – Jak zrušit sdílení sítě pro aktuální proces?