
Ich kenne das Argument „-C“, mit dem der Befehl gefiltert werden kann.
Aber in meinem Szenario habe ich möglicherweise einige Prozesse mit demselben Prozessnamen und unterschiedlichen Argumenten.
Wie filtert man nach diesen Argumenten?
(Ich weiß, dass ich später eine Pipe zu grep einrichten könnte, aber das ist nicht 100 %ig genau. D. h.: wenn ein Argument ein anderes Argument enthalten kann, beispielsweise wenn ich in dieser Liste nach dem Argument „bar“ filtern möchte:
+---------+---------+-----------+
| Process | Command | Arguments |
+---------+---------+-----------+
| 23 | foo | bar |
| 48 | foo | barbaz |
+---------+---------+-----------+
PS: Ich vermute, in den meisten Antworten wird mir empfohlen, „pgrep“ statt „ps“ zu verwenden, aber ich möchte dies nach Möglichkeit vermeiden.
Antwort1
Ich glaube nicht, dass Sie das ps
allein mit erreichen können. Sie haben Recht, dass das Filtern mit grep
nicht ideal ist, aber wenn Sie bereit sind, eine Chance zu geben pgrep
, können Sie Ihrer Anforderung ziemlich nahe kommen mit:
ps -p $(pgrep -f bar -d',')
Die -f
Option bewirkt pgrep
eine Suche in der gesamten Befehlszeile (anstatt nur im Prozessnamen), während die -d
Option das zum Aneinanderreihen der PIDs zu verwendende Trennzeichen angibt.
Durch Übergeben der PID-Liste ps
wird die Ausgabe auf diejenigen beschränkt, die das Schlüsselwort im vollständigen Befehl (einschließlich der Argumente) enthalten.
In Ihrem Beispiel, wo Sie „foo bar“, aber nicht „foo barbaz“ finden möchten, suchen Sie nach einer exakten Übereinstimmung mit:
ps -p $(pgrep -f "foo bar$" -d',') # Note the eol anchor '$'
Antwort2
Ich glaube nicht, dass es eine solche Option gibt – zumindest nicht in meiner Version von ps
. Ich bezweifle, dass viele ps
Implementierungen eine solche Option haben – der Befehlsname ist ziemlich einfach zu definieren, was bei Befehlsargumenten definitiv nicht der Fall ist.
Die Unix-Philosophie besteht jedenfalls darin, viele einfache Tools (z. B. ps
und grep
) zu verketten, um komplexere Aufgaben auszuführen. Man könnte argumentieren, dass ps -C
dies sogar übertrieben ist - tatsächlich glaube ich, dass MacOS X ps
eine solche Option nicht hat.
Was genau versuchen Sie zu tun?Was ist derKontextzu Ihrer Frage? Denn meiner Erfahrung nach gehen Leute in 99 % der Fälle, in denen sie Dinge automatisieren, indem ps
sie die Ausgabe analysieren, bei allem, was sie tun, falsch vor ...