Zadając to pytanie, ponieważ byłem zaskoczony, że nie znalazłem bezpośredniej odpowiedzi; przepraszam, jeśli to duplikat - wyglądałem!
Słyszałem to kill -9
lub kill -SIGKILL
jest złe, ale nie rozumiem dlaczego. Jeśli nie powinienem, kill -9
co powinienem zrobić, aby zabić proces?
kill -9
to ” OP mówi „ wielki, że działa! Będę pamiętać, że od teraz! ”, A B jest w ostrzec „ waitkill -9
jest niebezpieczne! ” Dopiero po fakcie.Odpowiedzi:
SIGKILL
wyciąga dywan z uruchomionego procesu, natychmiast go kończąc. W przypadku bardzo prostych programów jest to w porządku; w praktyce jednak istnieje bardzo niewiele „prostych” programów.Pod przykrywkami nawet trywialnie wyglądające programy wykonują wszelkiego rodzaju transakcje, które muszą wyczyścić przed zakończeniem (pomyśl o
finally
bloku w Javie i innych językach programowania), takie jak zamykanie uchwytów zasobów, usuwanie plików tymczasowych i opróżnianie danych z pamięć na dysk. Nie można przewidzieć, kiedy program może robić coś takiego.Jeśli masz szczęście, nie zauważysz niczego złego, jeśli wyślesz wiadomość
SIGKILL
, ale nie możesz mieć szczęścia na zawsze i możesz nie wiedzieć, że coś poszło nie tak, dopóki nie będzie za późno, aby odzyskać utracone rzeczy.Prawie nigdy nie powinieneś wysyłać wiadomości
SIGKILL
i upewnij się, że wyczerpałeś swoje alternatywy, zanim to zrobisz. W wielu przypadkach ponowne uruchomienie (które ostatecznie wyśleSIGKILL
s do niewłaściwie działających programów) jest bezpieczniejsze niż ręczne wysłanieSIGKILL
samego siebie. Prawdopodobnie mogę policzyć na palcach jednej ręki, ile razy mam potrzebnych , aby wysłaćSIGKILL
(i prawdopodobnie wszystkie moje własne życzenie).Ogólnie rzecz biorąc, możesz użyć Ctrl+ C(który wysyła proces pierwszego planu a
SIGINT
) lubSIGTERM
(jak w „zakończeniu”), aby poinstruować proces, aby przerwał to, co robi i wyjść.Dalsza lektura:
kill
sygnałami-9
znaczykill
sygnałówźródło