Abrufen von Pids aus dem Schlüsselwort ps -ef | grep


111

Ich möchte benutzen ps -ef | grep "keyword" , um die PID eines Daemon-Prozesses zu bestimmen (es gibt eine eindeutige Zeichenfolge in der Ausgabe von ps -ef).

Ich kann den Prozess pkill keywordbeenden. Gibt es einen Befehl, der die PID zurückgibt, anstatt sie zu beenden? (pidof oder pgrep funktioniert nicht)

Antworten:


231

Sie können verwenden pgrep, solange Sie die -fOptionen enthalten. Das macht pgreppassende Keywords im gesamten Befehl (einschließlich Argumente) , anstatt nur den Namen des Prozesses.

pgrep -f keyword

Von der Manpage :

-f       Das Muster wird normalerweise nur mit dem Prozessnamen abgeglichen. Wenn -ffestgelegt, wird die vollständige Befehlszeile verwendet.


Wenn Sie pgrep wirklich vermeiden möchten, versuchen Sie:

ps -ef | awk '/[k]eyword/{print $2}'

Beachten Sie den []ersten Buchstaben des Schlüsselworts. Dies ist ein nützlicher Trick, um zu vermeiden, dass der awkBefehl selbst übereinstimmt .


3
ps wird überbeansprucht und pgrep so wenig genutzt. Danke für den Beitrag.
Felipe Alvarez

6
Eine Möglichkeit, die Ausgabe zum Töten zu übergeben, ist: kill -9 `pgrep -f keyword`
Kris

Diese Antwort ist die beste aller Zeiten. So viel Zeit habe ich verschwendetps aux | grep chrome
Brandon

Musste den [k]Trick anwenden pgrep -f. Mein Skript wurde in einer Subshell ausgeführt, daher glaube ich, dass es seinen übergeordneten Befehl aufnahm (schwer zu wissen - die zurückgegebene PID war verschwunden, als der Befehl ausgeführt wurde!)
ArtOfWarfare

2
@Kris für diesen Anwendungsfall wäre nicht einfacher zu verwenden pkill -9 -f keyword?
oidualc

53

Versuchen

ps -ef | grep "KEYWORD" | awk '{print $2}'

Dieser Befehl sollte Ihnen die PID der Prozesse mit KEYWORD geben. In diesem Fall awkwird zurückgegeben, was in der 2. Spalte von der Ausgabe steht.


2
Da dies mehr als eine PID zurückgeben kann, können Sie die erste durch Anhängen erhalten | head -1.
Kris

'head -1' gibt grep PID unter Linux zurück. Sollte tail -1 sein.
Joao Vitorino

22

ps -ef | grep KEYWORD | grep -v grep | awk '{print $2}'


4
Vielleicht ein Tippfehler? ps -ef | grep KEYWORD | grep -v grep | awk '{print $ 2}'
rmv

Wissen Sie, wie Sie die zurückgegebene PID in "kill -9" übergeben können ?!
alybadawy

3
@alybadawy nur | xargs kill -9zum Ende hinzufügen
patte

8

ich benutze

ps -C "keyword" -o pid=

Dieser Befehl sollte Ihnen eine PID-Nummer geben.


7

Dies ist unter dem Schlüsselwort linux: pidof verfügbar


3

Um einen Prozess mit einem bestimmten Schlüsselwort zu beenden, können Sie einen Alias ​​in ~/.bashrc(Linux) oder ~/.bash_profile(Mac) erstellen .

alias killps="kill -9 `ps -ef | grep '[k]eyword' | awk '{print $2}'`"

Perfekt! Das Hinzufügen einer Pfeife am Ende der | head -1Verpackung macht das alles schön und ordentlich.
Russ
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.