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 ( myServerhier) läuft.
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 ( myServerhier) läuft.
Antworten:
Normalerweise benutze ich nur pgrep und pkill
if pgrep myServer; then pkill myServer; fi
pkill myServeroder killall -q myServer? Der Versuch, nicht vorhandene Prozesse zu beenden, hat keinen Nachteil.
|| trueDann anhängen .
if ! killall -q myServer; then echo ERROR; fi?
Ein etwas anderer Ansatz wäre ungefähr so:
killall PROCESS || echo "Process was not running."
Dadurch wird der 1vom killallBefehl zurückgegebene Fehlercode vermieden, wenn der Prozess nicht vorhanden war. Der echoTeil wird nur dann in Aktion treten, wenn er killallzurückkehrt 1, während er selbst zurückkehrt 0(Erfolg).
killall -qist besser
killall -qwird nicht von allen Unix-Varianten unterstützt, macOS Catalina hat es immer noch nicht.
versuchen Sie es mit:
sudo kill `pidof process_name`
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.
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
#!/bin/bash
echo " Enter the process name:"
read $proc_name
if pgrep $proc_name
then
echo " $proc_name running "
pkill $proc_name
echo "$proc_name got killed"
else
echo " $proc_name is not running/stopped "
fi
Speichern Sie es dann mit einem Namen wie script.sh
chmod +x script.sh
./script.sh
Geben Sie dann Ihren Prozessnamen an.
Hinweis: Ich habe es schon oft versucht und es ist in Ordnung.
Überprüfen Sie, ob der Prozess mit existiert pidof. Wenn ja, töte es:
(! pidof process_name) || sudo kill -9 $(pidof process_name)
Der Exit-Code ist nach Ausführung des obigen Befehls immer 0.
killnur 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 verwendenpkilloderkillallgenau das tun, was Sie versuchen, aber mit weniger zu tippen (und wahrscheinlich auch einige andere Vorteile).