Obecnie używam takiego wiersza w moim pliku skryptu sh:
kill `ps aux | grep -F 'myServer' | grep -v -F 'grep' | awk '{ print $2 }'`
Ale zastanawiam się, jak to nazwać, jeśli proces ( myServer
tutaj) jest uruchomiony?
Obecnie używam takiego wiersza w moim pliku skryptu sh:
kill `ps aux | grep -F 'myServer' | grep -v -F 'grep' | awk '{ print $2 }'`
Ale zastanawiam się, jak to nazwać, jeśli proces ( myServer
tutaj) jest uruchomiony?
Odpowiedzi:
Zwykle używam tylko pgrep i pkill
if pgrep myServer; then pkill myServer; fi
pkill myServer
czy killall -q myServer
? Próba zabicia nieistniejących procesów nie ma negatywnej strony.
|| true
wtedy.
if ! killall -q myServer; then echo ERROR; fi
?
Trochę innego podejścia byłoby coś takiego:
killall PROCESS || echo "Process was not running."
Pozwoli to uniknąć 1
kodu błędu zwróconego z killall
polecenia, jeśli proces nie istnieje. Ta echo
część wejdzie w życie tylko wtedy, gdy killall
powróci 1
, a sama powróci 0
(sukces).
killall -q
jest lepsze
killall -q
nie jest obsługiwane we wszystkich wersjach uniksowych, macOS Catalina wciąż go nie ma.
spróbuj użyć:
sudo kill `pidof process_name`
gdzie nazwa_procesu to nazwa procesu, który chcesz zabić. Wspaniałe w tym jest to, że pidof wyświetli pid wszystkich procesów pasujących do podanej nazwy. Ponieważ kill akceptuje wiele pidów, zabije ich wszystkich jednym kaprysem.
Daj mi znać, jeśli to pomoże.
kill `pidof process_name
. Jeśli zwraca pustą listę, pomiń wezwanie zabicia.
Mały skrypt, który stworzyłem w R&D. mam nadzieję, że Ci się spodoba
#!/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
zapisz go z nazwą, np. script.sh
chmod +x script.sh
./script.sh
Następnie podaj nazwę procesu.
Uwaga: wiele razy próbowałem z tym i jego w porządku.
Sprawdź, czy proces istnieje pidof
. Jeśli tak, zabij to:
(! pidof process_name) || sudo kill -9 $(pidof process_name)
Kod zakończenia zawsze wynosi 0 po wykonaniu powyższej komendy.
kill
tylko wtedy, gdy proces jest uruchomiony, ponieważ między testem a wywołaniem występuje warunek wyścigukill
(możliwe, że proces został zatrzymany z innego powodu w tak krótkim czasie). Powinieneś użyćpkill
lub,killall
które robią dokładnie to samo, co próbujesz zrobić, ale z mniejszą ilością do pisania (i prawdopodobnie także z innymi zaletami).