GNU/Linux >> Tutoriales Linux >  >> Linux

Biblioteca de Python para la gestión de procesos de Linux

Como dijiste que este es un servidor Linux, llamar al ps externo el binario suele ser más lento, usa más recursos y es más propenso a errores que usar la información de /proc directamente.

Como nadie más lo mencionó, una manera simple es:

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

Buena suerte.


Para iniciar/detener los subprocesos de python, puede usar el módulo de subprocesos. Para verificar si se están ejecutando, puede usar psutil:

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

...o esto (también comprobará si el PID ha sido reutilizado):

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

Esto es lo que uso. Utiliza procfs (por lo que está limitado a sistemas similares a Unix, creo que no funcionará en Mac) y el glob mencionado anteriormente. También obtiene la línea de cmd, que le permite identificar el proceso. Para matar el proceso puedes usar os.kill(signal.SIGTERM, pid) . Para usar el subproceso, consulte esta publicación Python, Popen y seleccione:esperar a que termine un proceso o un tiempo de espera

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)

La verificación de la lista de procesos en ejecución se logra (incluso mediante utilidades centrales como "ps") mirando el contenido del directorio /proc.

Como tal, la biblioteca que le interesa para consultar los procesos en ejecución es la misma que se usa para trabajar con cualquier otro archivo y directorio (es decir, sys o os , dependiendo del sabor que busques. Presta especial atención a os.path sin embargo, hace la mayor parte de lo que buscas). Para terminar o interactuar con los procesos, les envía señales, lo que se logra con os.kill . Finalmente, inicia nuevos procesos usando os.popen y amigos.


Linux
  1. Uso de AppImage para la administración de paquetes de Linux

  2. 8 comandos de Linux para una gestión de procesos eficaz

  3. Linux:¿limitar el uso de memoria para un solo proceso de Linux?

  4. Linux:¿cómo dejar de compartir la red para el proceso actual?

  5. Más de 10 ejemplos para matar un proceso en Linux

Gestión de procesos de Linux mejorada con htop

bpython:un intérprete sofisticado de Python para Linux

Cómo instalar la biblioteca Python de PyBrain en Linux

Cómo instalar Setuptools para Python en Linux

Comandos para la Gestión de Procesos en Linux

Los 10 mejores software de gestión de bibliotecas para sistemas Linux