ps
Gibt bash
als Namen des Prozesses zurück ... Ich möchte stattdessen den Namen des Shell-Skripts.
Wenn mein Skript beispielsweise lautet TestEric.sh
, möchte ich die Anzahl der Instanzen dieses Skripts auflisten, die derzeit ausgeführt werden.
ps
Gibt bash
als Namen des Prozesses zurück ... Ich möchte stattdessen den Namen des Shell-Skripts.
Wenn mein Skript beispielsweise lautet TestEric.sh
, möchte ich die Anzahl der Instanzen dieses Skripts auflisten, die derzeit ausgeführt werden.
Antworten:
Das Problem hierbei ist, dass ps
standardmäßig nur der Basisbefehl in seiner Ausgabe angezeigt wird, nicht die gesamte Befehlszeile einschließlich der Argumente.
Wenn Sie Ihr Skript mit starten bash TestEric.sh
, lautet der Basisbefehl bash
. Wenn Sie es als ausführen TestEric.sh
(möglicherweise einschließlich seines Pfads), lautet der Basisbefehl das und nicht bash.
Sie können Prozesse einfach verwenden, pgrep
anstatt sie ps
nach Namen zu filtern. Es verfügt über ein -f
Flag, mit dem das angegebene Muster mit der gesamten Befehlszeile und nicht nur mit dem Basisbefehl abgeglichen wird.
Mit dem -a
Flag wird die gesamte Befehlszeile in der Ausgabe zu Debugging-Zwecken anstelle nur der PID angezeigt. Sobald Sie überprüft haben, dass es funktioniert, können / sollten Sie es wieder in Ihrem Skript entfernen.
Versuche dies:
pgrep -f -a TestEric.sh
Sie können die Prozesse später zählen, wc
indem Sie die pgrep
Ausgabezeilen zählen:
pgrep -f TestEric.sh | wc -l
Anscheinend hilft es, wenn ich !#/bin/bash
am Anfang der Datei hinzufüge ... Dann erscheint der Name des Skripts im ps
Bericht.