
Unter Windows habe ich das bereits herausgefunden, aber wie es unter Linux geht, ist mir ein Rätsel:
tasklist /V /NH | find "test test 123"
Und dann zähle ich die Anzahl der nicht leeren Zeilen in der Ausgabe. Das ist super langsam, funktioniert aber. Jetzt suche ich nach der Linux-Methode, um dasselbe zu tun.
Das heißt, „Test Test 123“ kann der vollständige Prozesstitel sein, er kann damit beginnen, er kann damit enden oder er kann einfach in der Mitte stehen. Das ist wichtig.
Antwort1
Kurz zusammengefasst: verwendenpgrep -cf "test test 123"
Das ps
Programm listet alle laufenden Prozesse auf. Versuchen Sie insbesondere:
ps aux
Jetzt können Sie die Liste einfach filtern, um grep
nach Ihrer Zeichenfolge zu suchen:
ps aux | grep "test test 123"
Dadurch werden übereinstimmende Zeilen ausgedruckt. Um sie zu zählen, verwenden Sie grep -c
stattdessen which, das die Anzahl der übereinstimmenden Zeilen ausgibt:
ps aux | grep -c "test test 123"
Das Problem bei diesem Ansatz ist, dass der grep
oben beschriebene Prozess auch in den Ergebnissen angezeigt wird. Ich bearbeite beispielsweise gerade eine Datei mit dem Namen test test 123
, aber wenn ich den obigen Befehl ausführe, sehe ich sowohl den Prozess meines Dateieditors als auch den grep
selbst:
$ ps aux | grep "test test 123"
terdon 2461453 22.0 0.2 392944 79796 pts/1 Sl 15:53 0:02 emacs test test 123
terdon 2462354 0.0 0.0 8832 2292 pts/1 S+ 15:53 0:00 grep --color test test 123
Daher wird anstelle von Folgendes grep -c
zurückgegeben :2
1
$ ps aux | grep -c "test test 123"
2
Damit kommen wir zum richtigen Werkzeug für diese Aufgabe pgrep
. Dieses Werkzeug wurde speziell dafür entwickelt, Prozesse zu finden:
$ pgrep -cf "test test 123"
1
Das -c
bedeutet „Übereinstimmungen zählen“ und das -f
bedeutet „die gesamte Befehlszeile durchsuchen, nicht nur den Prozessnamen“.
Der andere gängige Trick zum Überspringen des grep
selbst besteht darin, anstelle derselben Zeichenfolge eine einstellige Zeichenklasse zu verwenden, sodass die grep
Befehlszeile die Zeichenfolge nicht enthält:
$ ps aux | grep "test test 123"
terdon 2461453 1.2 0.2 392944 79796 pts/1 Sl 15:53 0:02 emacs test test 123
terdon 2476971 0.0 0.0 8832 2236 pts/1 S+ 15:56 0:00 grep --color test test 123
$ ps aux | grep "[t]est test 123"
terdon 2461453 1.2 0.2 392944 79796 pts/1 Sl 15:53 0:02 emacs test test 123
$ ps aux | grep -c "[t]est test 123"
1
Weitere Informationen zu diesem Trick finden Sie unterHier. Aber das ist wirklich nicht notwendig, wenn Ihr System über pgrep
die gleichen Eigenschaften wie Linux-Systeme verfügt.
Antwort2
echo $(( $(ps aux | grep "test test 123" | wc -l) - 1))
sollte zum Trick