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?
bash
command-line
kill
myWallJSON
źródło
źródło
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).Odpowiedzi:
Zwykle używam tylko pgrep i pkill
źródło
pkill myServer
czykillall -q myServer
? Próba zabicia nieistniejących procesów nie ma negatywnej strony.|| true
wtedy.if ! killall -q myServer; then echo ERROR; fi
?Możesz zabijać procesy według nazw, używając
pkill
lubkillall
, sprawdzaj ich strony podręcznika.źródło
kill
, zabija to tylko wtedy, gdy proces jest uruchomiony. Na przykładpkill -u myuser -f myprocess\.[0-9]+
Trochę innego podejścia byłoby coś takiego:
Pozwoli to uniknąć
1
kodu błędu zwróconego zkillall
polecenia, jeśli proces nie istnieje. Taecho
część wejdzie w życie tylko wtedy, gdykillall
powróci1
, a sama powróci0
(sukces).źródło
killall -q
jest lepszekillall -q
nie jest obsługiwane we wszystkich wersjach uniksowych, macOS Catalina wciąż go nie ma.spróbuj użyć:
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.
źródło
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
zapisz go z nazwą, np. script.sh
Następnie podaj nazwę procesu.
Uwaga: wiele razy próbowałem z tym i jego w porządku.
źródło
Sprawdź, czy proces istnieje
pidof
. Jeśli tak, zabij to:Kod zakończenia zawsze wynosi 0 po wykonaniu powyższej komendy.
źródło
Użyj
pkill
z opcją-f
Opcją
-f
jest wzorzec, który zwykle jest dopasowywany do nazwy procesu.źródło
Użyłbym:
xargs -r
Kaze biec zabić tylko jeśli nie ma wejścia.ps --no-header -eo pid,cmd
Dostaje wyjścia do lepszego formatu parsowania.źródło