Kann die Ausgabe des Linux-Befehls ps nach dem Benutzer AND-Befehl gefiltert werden?

8

Ich brauche die PID für einen Prozess, der seinem Besitzer und seinem Befehl gegeben ist. Ich kann einen Prozess pro Benutzer mit "ps -u xxx" und seinem Befehl nach "ps -C yyy" filtern, aber wenn ich "ps -u xxx -C yyy" versuche, werden sie mithilfe der ODER-Logik kombiniert. Ich brauche UND Logik. Wie kann ich das erreichen?

Krumelur
quelle

Antworten:

11

Verwenden Sie pgrep?

pgrep -U xxx yyy

Es wird nur die PID zurückgegeben (oder Pids, wenn mehr als ein Prozess übereinstimmt).

Marius Gedminas
quelle
2

Grep verwenden?

ps -u xxx | grep yyy | grep -v grep
RedGrittyBrick
quelle
2

Sie verwenden comm, um PIDs zu finden, die beiden Bedingungen gemeinsam sind:

ps -u xxx | sort > /tmp/ps-uxxx
ps -C yyy | sort > /tmp/ps-Cyyy
comm -1 -2 /tmp/ps-uxxx /tmp/ps-Cyyy

Mit bash können Sie die Prozessersetzung verwenden, um die Notwendigkeit temporärer Dateien zu vermeiden:

comm -1 -2 <(ps -u xxx | sort) <(ps -C yyy | sort)
GargantuChet
quelle
Funktioniert, vielen Dank. ... Aber gibt es keinen einfacheren Weg (ohne pgrep zu verwenden, da dies in meinem Kontext nicht verfügbar ist)?
Guettli
Was ist daran nicht einfach?
GargantuChet
Ich weiß was ein commmacht. Aber ich benutze es nur einmal im Jahr. Es ist nicht intuitiv für mich. Ich denke, jeder, der es täglich benutzt, sieht das anders. Das sind gute Gründe, warum pgrep existiert. Leider ist pgrep in meinem Kontext nicht verfügbar .... Aber es ist jetzt gelöst. Die Wurzel des Problems ist (aus meiner Sicht), dass ich das sehr alte Betriebssystem ohne pgrep unterstützen muss.
Guettli