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