GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo obtener PID por nombre de proceso?

también puedes usar pgrep , en prgep también puedes dar un patrón para el partido

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

también puedes usar awk con ps así

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

Puede obtener el pid de los procesos por nombre usando pidof a través de 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]) ejecutará el comando como "pidof process_name" , Si el código de retorno no es cero, genera un CalledProcessError.

Para manejar múltiples entradas y convertir a enteros:

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

En [21]:get_pid("cromo")

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]

O pasa el -s bandera para obtener un único pid:

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

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

Para posix (Linux, BSD, etc... solo se necesita montar el directorio /proc) es más fácil trabajar con archivos os en /proc. Es Python puro, no es necesario llamar a programas de shell externos.

Funciona en python 2 y 3 (La única diferencia (2to3) es el árbol de excepciones, por lo tanto, "excepto excepción ", que no me gusta, pero lo mantuve para mantener la compatibilidad. También podría haber creado una excepción personalizada).

#!/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)))

Salida de muestra (funciona como pgrep):

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

Puedes usar psutil paquete:

Instalar

pip install psutil

Uso:

import psutil

process_name = "chrome"
pid = None

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


Linux
  1. ¿Cómo puedo matar un proceso por nombre en lugar de PID?

  2. ¿Cómo obtengo la ruta de un proceso en Unix/Linux?

  3. ¿Cómo obtener el ID de proceso del proceso en segundo plano?

  4. ¿Cómo obtengo el nombre de usuario en un Makefile?

  5. Nombre del proceso de su pid en Linux

Cómo encontrar un nombre de proceso usando el número PID en Linux

Cómo encontrar el nombre del proceso a partir de su PID

El comando de Linux obtiene la identificación del proceso de Tomcat por nombre

¿Cómo obtener solo la ID del proceso en especificar el nombre del proceso en Linux?

¿Cómo obtener el PID principal de un proceso determinado en GNU/Linux desde la línea de comandos?

Si conozco el número PID de un proceso, ¿cómo puedo obtener su nombre?