Czy jest jakaś różnica między
kill -9 212121
i
kill 212121
Czy jest jakaś różnica między
kill -9 212121
i
kill 212121
Odpowiedzi:
Strona kill
podręcznika użytkownika Ubuntu wyjaśnia cel -9
przełączenia (co prawda w dość niepewny sposób):
Name Num Action Description
KILL 9 exit cannot be blocked
Oto, co mówi inna strona podręcznika.
Polecenie
kill
wysyła określony sygnał do określonego procesu lub grupy procesów. Jeśli nie określono żadnego sygnału,TERM
sygnał jest wysyłany.TERM
Sygnał zabije procesów, które nie złapać ten sygnał. W przypadku innych procesów może być konieczne użycie sygnałuKILL
(9
), ponieważ sygnał ten nie może zostać przechwycony.
Dlatego użycie -9
przełącznika gwarantuje, że proces zostanie skutecznie zabity. Nawet jeśli zamrożony lub niereagujący proces może nie reagować na prosty TERM
sygnał, umrze po wysłaniu KILL
sygnału.
Polecenie kill wyśle zdefiniowany sygnał do procesu o podanej tożsamości (PID):
kill -<signal> <pid>
Oczywiście możemy zabijać tylko procesy, które posiadamy, podczas gdy root może zabijać wszystkie procesy. Zobacz Wikipedię za miły podsumowanie sygnałów komputerowych.
Sygnały, które kill
można wysyłać, są wymienione na stronie podręcznika . Sygnał może być reprezentowany przez nazwę lub numer. Jeśli nie podano żadnego sygnału, domyślny sygnał 15 lub. TERM
Jest używane.
Wszystkie trzy poniższe polecenia są zatem identyczne:
kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234
Różnica pomiędzy SIGTERM
i SIGKILL
jest sposobem aplikacja może działać na sygnale:
TERM
: aplikacja będzie mogła zakończyć działanie, tj. poprawnie uruchomić procedurę zamykania. KILL
: aplikacje są natychmiast zatrzymywane i zabijane (co może prowadzić do utraty danych lub zwiększenia prawdopodobieństwa zgłoszenia domniemanej awarii w niektórych przypadkach).Pamiętaj, że wszystkie następujące elementy są synonimami:
kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234
Warto zauważyć, że w świecie obsługi sygnałów SIGKILL jest jednym z niewielu unikalnych obsługiwanych przez system operacyjny, a nie program. Podczas uruchamiania kill -9
nie nakazujesz aplikacji, aby się zakończyła, zamiast tego nakazujesz systemowi operacyjnemu, aby przestał uruchamiać program, bez względu na to, co program robi.
Po wysłaniu SIGKILL program zostanie natychmiast zatrzymany. Jeśli w imieniu programu są uruchomione jakieś wywołania jądra (np. File IO), mogą one, ale nie muszą, być kontynuowane, dopóki się nie zakończą, w zależności od wywołania, ale sam program nie będzie już działał. Zauważ, że śledzone zadania lub zadania uruchomione w debuggerze mogą zachowywać się tutaj inaczej.
Innym sygnałem, którego nie można zablokować, jest SIGSTOP, który ma podobny efekt, ale zamiast tego zawiesza program; możesz wysłać SIGCONT później, aby go wznowić. To zachowanie jest całkowicie kontrolowane przez system operacyjny, a program nie otrzymuje uprzedniego powiadomienia.
Wszystkie pozostałe sygnały są wysyłane do programu; poradzi sobie z nimi w dowolny sposób, lub jeśli zignoruje sygnał, wówczas zachowane zostanie zachowanie domyślne.
Oto kilka przydatnych sygnałów, które możesz wysłać do procesu:
kill
i killall
. cat /etc/passwd | head -n1
wyśle SIGPIPE do cat
procesu po wydrukowaniu pierwszego wiersza, powodując cat
zakończenie przed zakończeniem całego pliku.Chociaż wszystkie te sygnały występują „naturalnie” w ich własnych ustawieniach, możesz użyć tego sygnału, aby sfałszować warunek, aby osiągnąć pożądany rezultat.
Na przykład, jeśli chcesz zakończyć czyjąś sesję SSH, możesz po prostu zabić proces, ale w ten sposób zapobiegniesz aktualizacji pliku HISTORY, co może być ważne ze względów bezpieczeństwa. Ale zamiast tego, jeśli wyślesz go SIGHUP , proces zakłada, że połączenie zostało przerwane i wykona standardowe czyszczenie.
SIGQUIT
, gdzie domyślną akcją jest zrzucenie rdzenia i zakończenie. Można tego użyć, jeśli program robi coś bardzo złego, musisz go natychmiast zatrzymać i chcesz móc go później debugować.
kill -9 Znaczenie: Proces zostanie zabity przez jądro; tego sygnału nie można zignorować. 9 oznacza sygnał KILL, którego nie można złapać ani zignorować
Wykorzystuje: SIGKILL singal
Kill Znaczenie: Polecenie kill bez żadnego sygnału przekazuje sygnał 15, co kończy proces w normalny sposób.
Wykorzystuje: sygnał SIGTERM , który może być obsługiwany przez programistów
kill -9