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)

Dennis Ich
quelle

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 .

Shawn Chin
quelle
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.

Lewis Norton
quelle
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}'

Vinayak
quelle
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.

Arksonic
quelle
7

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

dbrank0
quelle
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}'`"
Swayamraina
quelle
Perfekt! Das Hinzufügen einer Pfeife am Ende der | head -1Verpackung macht das alles schön und ordentlich.
Russ