GNU/Linux >> Linux Esercitazione >  >> Linux

Libreria Python per la gestione dei processi Linux

Dato che hai detto che si tratta di un server Linux, chiama il ps esterno binario è solitamente più lento, utilizza più risorse ed è più soggetto a errori rispetto all'utilizzo delle informazioni da /proc direttamente.

Poiché nessun altro ha menzionato, un modo semplice è:

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

Buona fortuna.


Per avviare/arrestare i sottoprocessi python puoi usare il modulo subprocess. Per verificare se sono in esecuzione puoi usare psutil:

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

...o questo (verificherà anche se il PID è stato riutilizzato):

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

Questo è quello che uso. Usa procfs (quindi sei limitato a sistemi simili a Unix, non funzionerà su Mac credo) e il glob. Ottiene anche la cmdline, che consente di identificare il processo. Per uccidere il processo puoi usare os.kill(signal.SIGTERM, pid) . Per utilizzare il sottoprocesso, controlla questo post Python, Popen e seleziona - in attesa della fine di un processo o di un timeout

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)

Il controllo dell'elenco dei processi in esecuzione viene eseguito (anche da utilità di base come "ps") osservando il contenuto della directory /proc.

Pertanto, la libreria che ti interessa per interrogare i processi in esecuzione è la stessa utilizzata per lavorare con qualsiasi altro file e directory (ad es. sys o os , a seconda del sapore che stai cercando. Presta particolare attenzione a os.path tuttavia, fa la maggior parte di ciò che cerchi). Per terminare o interagire in altro modo con i processi, invii loro dei segnali, cosa che si ottiene con os.kill . Infine, inizi nuovi processi usando os.popen e amici.


Linux
  1. 8 comandi Linux per una gestione efficace dei processi

  2. Linux:limite all'utilizzo della memoria per un singolo processo Linux?

  3. Oltre 10 esempi per uccidere un processo in Linux

  4. Controlla il limite FD aperto per un determinato processo in Linux

  5. Equivalente di Process Monitor per Linux?

Gestione dei processi Linux migliorata con htop

bpython – Un fantastico interprete Python per Linux

Come installare la libreria Python PyBrain in Linux

Come installare Setuptools per Python su Linux

Comandi per la gestione dei processi in Linux

I 10 migliori software di gestione delle librerie per sistemi Linux