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?

Antworten:


11

Verwenden Sie pgrep?

pgrep -U xxx yyy

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



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)

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