Sie können auch pgrep
verwenden , in prgep
Sie können auch ein Muster für eine Übereinstimmung angeben
import subprocess
child = subprocess.Popen(['pgrep','program_name'], stdout=subprocess.PIPE, shell=True)
result = child.communicate()[0]
Sie können auch awk
verwenden mit ps wie diesem
ps aux | awk '/name/{print $2}'
Sie können die PID von Prozessen anhand des Namens mit pidof
abrufen durch 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])
führt den Befehl als "pidof process_name"
aus , Wenn der Rückgabecode nicht Null war, wird ein CalledProcessError ausgelöst.
So verarbeiten Sie mehrere Einträge und wandeln sie in ints um:
from subprocess import check_output
def get_pid(name):
return map(int,check_output(["pidof",name]).split())
In [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]
Oder geben Sie -s
ein Flag, um eine einzelne PID zu erhalten:
def get_pid(name):
return int(check_output(["pidof","-s",name]))
In [25]: get_pid("chrome")
Out[25]: 27698
Für Posix (Linux, BSD, etc... muss nur das Verzeichnis /proc gemountet werden) ist es einfacher, mit os-Dateien in /proc zu arbeiten. Es ist reines Python, keine Notwendigkeit, Shell-Programme außerhalb aufzurufen.
Funktioniert auf Python 2 und 3 (Der einzige Unterschied (2to3) ist der Ausnahmebaum, daher die "außer Ausnahme ", was ich nicht mag, aber beibehalten habe, um die Kompatibilität zu wahren. Außerdem hätte man eine benutzerdefinierte Ausnahme erstellen können.)
#!/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)))
Beispielausgabe (funktioniert wie pgrep):
phoemur ~/python $ ./pgrep.py bash
1487 : -bash
1779 : /bin/bash
Sie können psutil
verwenden Paket:
Installieren
pip install psutil
Verwendung:
import psutil
process_name = "chrome"
pid = None
for proc in psutil.process_iter():
if process_name in proc.name():
pid = proc.pid