GNU/Linux >> Tutoriels Linux >  >> Linux

bibliothèque Python pour la gestion des processus Linux

Puisque vous avez dit qu'il s'agit d'un serveur Linux, appelez le ps externe le binaire est généralement plus lent, utilise plus de ressources et est plus sujet aux erreurs que l'utilisation des informations de /proc directement.

Puisque personne d'autre n'a mentionné, un moyen simple est :

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

Bonne chance.


Pour démarrer/arrêter les sous-processus Python, vous pouvez utiliser le module subprocess. Pour vérifier s'ils sont en cours d'exécution, vous pouvez utiliser psutil :

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

...ou ceci (il vérifiera également si le PID a été réutilisé) :

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

C'est ce que j'utilise. Il utilise procfs (vous êtes donc limité aux systèmes de type Unix, ne fonctionnera pas sur les macs, je pense) et le glob mentionné précédemment. Il obtient également la cmdline, qui vous permet d'identifier le processus. Pour tuer le processus, vous pouvez utiliser os.kill(signal.SIGTERM, pid) . Pour utiliser un sous-processus, veuillez vérifier ce post Python, Popen et sélectionnez - en attente de la fin d'un processus ou d'un délai d'attente

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 vérification de la liste des processus en cours d'exécution est accomplie (même par des utilitaires de base comme "ps") en regardant le contenu du répertoire /proc.

En tant que tel, la bibliothèque qui vous intéresse pour interroger les processus en cours d'exécution est la même que celle utilisée pour travailler avec d'autres fichiers et répertoires (c'est-à-dire sys ou os , selon la saveur recherchée. Portez une attention particulière à os.path cependant, il fait la plupart de ce que vous recherchez). Pour terminer ou interagir autrement avec les processus, vous leur envoyez des signaux, ce qui est accompli avec os.kill . Enfin, vous démarrez de nouveaux processus en utilisant os.popen et amis.


Linux
  1. Utilisation d'AppImage pour la gestion des packages Linux

  2. Comment empaqueter des applications Python pour Linux

  3. 10+ exemples pour tuer un processus sous Linux

  4. Vérifier la limite FD ouverte pour un processus donné sous Linux

  5. Comment définir l'ID de processus sous Linux pour un programme spécifique

Gestion des processus Linux améliorée avec htop

bpython - Un interpréteur Python fantaisie pour Linux

Comment installer la bibliothèque Python PyBrain sous Linux

Comment installer Setuptools pour Python sur Linux

Commandes pour la gestion des processus sous Linux

Top 10+ des meilleurs logiciels de gestion de bibliothèque pour système Linux