GNU/Linux >> Tutoriels Linux >  >> Linux

Comment obtenir le PID par nom de processus ?

vous pouvez également utiliser pgrep , en prgep vous pouvez également donner un modèle pour le match

import subprocess
child = subprocess.Popen(['pgrep','program_name'], stdout=subprocess.PIPE, shell=True)
result = child.communicate()[0]

vous pouvez également utiliser awk avec ps comme ça

ps aux | awk '/name/{print $2}'

Vous pouvez obtenir le pid des processus par leur nom en utilisant pidof via subprocess.check_output :

from subprocess import check_output
def get_pid(name):
    return check_output(["pidof",name])


In [5]: get_pid("java")
Out[5]: '23366\n'

check_output(["pidof",name]) exécutera la commande en tant que "pidof process_name" , Si le code de retour était différent de zéro, il déclenche une CalledProcessError.

Pour gérer plusieurs entrées et convertir en entiers :

from subprocess import check_output
def get_pid(name):
    return map(int,check_output(["pidof",name]).split())

Dans [21] :get_pid("chrome")

Out[21]: 
[27698, 27678, 27665, 27649, 27540, 27530, 27517, 14884, 14719, 13849, 13708, 7713, 7310, 7291, 7217, 7208, 7204, 7189, 7180, 7175, 7166, 7151, 7138, 7127, 7117, 7114, 7107, 7095, 7091, 7087, 7083, 7073, 7065, 7056, 7048, 7028, 7011, 6997]

Ou passez le -s flag pour obtenir un seul pid :

def get_pid(name):
    return int(check_output(["pidof","-s",name]))

In [25]: get_pid("chrome")
Out[25]: 27698

Pour posix (Linux, BSD, etc... n'ont besoin que du répertoire /proc pour être monté), il est plus facile de travailler avec des fichiers os dans /proc. C'est du pur python, pas besoin d'appeler des programmes shell à l'extérieur.

Fonctionne sur python 2 et 3 ( La seule différence (2to3) est l'arborescence des exceptions, donc le "except Exception ", que je n'aime pas mais que j'ai conservé pour maintenir la compatibilité. J'aurais également pu créer une exception personnalisée.)

#!/usr/bin/env python

import os
import sys


for dirname in os.listdir('/proc'):
    if dirname == 'curproc':
        continue

    try:
        with open('/proc/{}/cmdline'.format(dirname), mode='rb') as fd:
            content = fd.read().decode().split('\x00')
    except Exception:
        continue

    for i in sys.argv[1:]:
        if i in content[0]:
            print('{0:<12} : {1}'.format(dirname, ' '.join(content)))

Exemple de sortie (il fonctionne comme pgrep) :

phoemur ~/python $ ./pgrep.py bash
1487         : -bash 
1779         : /bin/bash

Vous pouvez utiliser psutil paquet :

Installer

pip install psutil

Utilisation :

import psutil

process_name = "chrome"
pid = None

for proc in psutil.process_iter():
    if process_name in proc.name():
       pid = proc.pid


Linux
  1. Comment identifier un processus qui n'a pas de PID ?

  2. Comment puis-je tuer un processus par nom au lieu de PID?

  3. Obtenir par programmation le pid parent d'un autre processus ?

  4. Comment obtenir l'ID de processus pour tuer un processus nohup ?

  5. Comment obtenir le PID d'un processus enfant forké dans un script shell

Comment trouver un nom de processus à l'aide d'un numéro PID sous Linux

Comment trouver le nom du processus à partir de son PID

Comment obtenir le PID parent d'un processus donné sous GNU/Linux à partir de la ligne de commande ?

Si je connais le numéro PID d'un processus, comment puis-je obtenir son nom ?

Comment obtenir le pid d'un processus et invoquer kill -9 dessus dans le script shell ?

Comment obtenir le nom de l'utilisateur à partir de l'uid