Flag für den „ps“-Befehl, das nach Argumenten filtern kann?

Flag für den „ps“-Befehl, das nach Argumenten filtern kann?

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 psallein mit erreichen können. Sie haben Recht, dass das Filtern mit grepnicht 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 -fOption bewirkt pgrepeine Suche in der gesamten Befehlszeile (anstatt nur im Prozessnamen), während die -dOption das zum Aneinanderreihen der PIDs zu verwendende Trennzeichen angibt.

Durch Übergeben der PID-Liste pswird 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 psImplementierungen 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. psund grep) zu verketten, um komplexere Aufgaben auszuführen. Man könnte argumentieren, dass ps -Cdies sogar übertrieben ist - tatsächlich glaube ich, dass MacOS X pseine 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 pssie die Ausgabe analysieren, bei allem, was sie tun, falsch vor ...

verwandte Informationen