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.
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.
Antworten:
Normalerweise benutze ich nur pgrep und pkill
if pgrep myServer; then pkill myServer; fi
pkill myServer
oder killall -q myServer
? Der Versuch, nicht vorhandene Prozesse zu beenden, hat keinen Nachteil.
|| true
Dann 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 1
vom killall
Befehl zurückgegebene Fehlercode vermieden, wenn der Prozess nicht vorhanden war. Der echo
Teil wird nur dann in Aktion treten, wenn er killall
zurückkehrt 1
, während er selbst zurückkehrt 0
(Erfolg).
killall -q
ist besser
killall -q
wird 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.
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).