GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie bekomme ich PID nach Prozessname?

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


Linux
  1. Wie identifiziere ich einen Prozess, der keine Pid hat?

  2. Wie kann ich einen Prozess anhand des Namens anstelle der PID beenden?

  3. Übergeordnete PID eines anderen Prozesses programmgesteuert abrufen?

  4. Linux-Befehl Tomcat-Prozess-ID nach Namen abrufen

  5. Prozessname von seiner PID in Linux

So finden Sie einen Prozessnamen mithilfe der PID-Nummer in Linux

So finden Sie den Prozessnamen anhand seiner PID

Wie bekomme ich die Prozess-ID, um einen Nohup-Prozess zu beenden?

So erhalten Sie die PID von einem gegabelten untergeordneten Prozess im Shell-Skript

Wie erhalte ich die übergeordnete PID eines bestimmten Prozesses in GNU/Linux von der Befehlszeile aus?

Wenn ich die PID-Nummer eines Prozesses kenne, wie erhalte ich seinen Namen?