Czy jest jakaś różnica między
kill -9 212121
i
kill 212121
command-line
bash
użytkownik784637
źródło
źródło
kill -9
Odpowiedzi:
Strona
kill
podręcznika użytkownika Ubuntu wyjaśnia cel-9
przełączenia (co prawda w dość niepewny sposób):Oto, co mówi inna strona podręcznika.
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 prostyTERM
sygnał, umrze po wysłaniuKILL
sygnału.źródło
Polecenie kill wyśle zdefiniowany sygnał do procesu o podanej tożsamości (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:
Różnica pomiędzy
SIGTERM
iSIGKILL
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).źródło
Pamiętaj, że wszystkie następujące elementy są synonimami:
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:
Informuje program, że użytkownik się rozłączył (np. Sesja SSH lub okno terminala zostało zamknięte).
Zwykle wykonuje płynne zamknięcie programu.
Wysyłane po naciśnięciu CTRL+ C
Zazwyczaj oznacza „przestań robić” - może zabić program, ale nie musi
Domyślne wysłane przez
kill
ikillall
.Zwykle kończy program ... czasami po zakończeniu tego, co robi.
Wysłane po naciśnięciu CTRL+ Z
Wstrzymuje program, omówiony powyżej
Informuje program, że potok został zamknięty. Zwykle kończy program.
Na przykład
cat /etc/passwd | head -n1
wyśle SIGPIPE docat
procesu po wydrukowaniu pierwszego wiersza, powodująccat
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.
źródło
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
źródło