Derzeit verwende ich folgende Zeile in meiner sh-Skriptdatei:
kill `ps aux | grep -F 'myServer' | grep -v -F 'grep' | awk '{ print $2 }'`
Aber ich frage mich, wie ich es nur aufrufen soll, wenn der Prozess ( myServer
hier) läuft.
bash
command-line
kill
myWallJSON
quelle
quelle
kill
nur aufzurufen , wenn der Prozess ausgeführt wird, da zwischen dem Test und dem Aufruf von eine Race-Bedingung bestehtkill
(es ist möglich, dass der Prozess in dieser kurzen Zeit aus einem anderen Grund gestoppt wurde). Sie sollten verwendenpkill
oderkillall
genau das tun, was Sie versuchen, aber mit weniger zu tippen (und wahrscheinlich auch einige andere Vorteile).Antworten:
Normalerweise benutze ich nur pgrep und pkill
quelle
pkill myServer
oderkillall -q myServer
? Der Versuch, nicht vorhandene Prozesse zu beenden, hat keinen Nachteil.|| true
Dann anhängen .if ! killall -q myServer; then echo ERROR; fi
?Sie können Prozesse mit Namen beenden
pkill
oderkillall
ihre Manpages überprüfen.quelle
kill
wird dies nur beendet, wenn der Prozess ausgeführt wird. Zum Beispielpkill -u myuser -f myprocess\.[0-9]+
Ein etwas anderer Ansatz wäre ungefähr so:
Dadurch wird der
1
vomkillall
Befehl zurückgegebene Fehlercode vermieden, wenn der Prozess nicht vorhanden war. Derecho
Teil wird nur dann in Aktion treten, wenn erkillall
zurückkehrt1
, während er selbst zurückkehrt0
(Erfolg).quelle
killall -q
ist besserkillall -q
wird nicht von allen Unix-Varianten unterstützt, macOS Catalina hat es immer noch nicht.versuchen Sie es mit:
Dabei ist process_name der Name des Prozesses, den Sie beenden möchten. Das Tolle daran ist, dass pidof die Pids aller Prozesse auflistet, die mit dem angegebenen Namen übereinstimmen. Da kill mehrere Pids akzeptiert, werden alle in einer einzigen Laune getötet.
Lassen Sie mich wissen, ob das hilft.
quelle
kill `pidof process_name
. Wenn eine leere Liste zurückgegeben wird, überspringen Sie den Kill-Aufruf.Kleines Skript, das ich mit F & E erstellt habe. ich hoffe du wirst es mögen
Speichern Sie es dann mit einem Namen wie script.sh
Geben Sie dann Ihren Prozessnamen an.
Hinweis: Ich habe es schon oft versucht und es ist in Ordnung.
quelle
Überprüfen Sie, ob der Prozess mit existiert
pidof
. Wenn ja, töte es:Der Exit-Code ist nach Ausführung des obigen Befehls immer 0.
quelle
Ich würde ... benutzen:
Das
xargs -r
weist an, kill nur auszuführen, wenn Eingaben vorhanden sind. Dasps --no-header -eo pid,cmd
bringt die Ausgabe in ein besseres Format zum Parsen.quelle