Bash Man Page: kill <pid> vs kill -9 <pid>

25

Moja strona podręcznika nie dokumentuje różnicy między

kill <pid>

i

kill -9 <pid>

Ponieważ robią one różne rzeczy, dlaczego -9 nie jest udokumentowane na stronie killpodręcznika? Pomyślałem, że może to są rzeczy specyficzne dla powłoki, więc też zajrzałem na stronę podręcznika użytkownika bash, ale bez powodzenia.

Dodatkowe pytanie: co robi -9?

sześćdziesiąt stóp
źródło

Odpowiedzi:

40

killpo prostu wysyła sygnał do danego procesu. -9Mówi to jaki sygnał wysłać.

Różne liczby odpowiadają różnym wspólnym sygnałom. SIGINT, na przykład wynosi 2, więc aby wysłać proces, SIGINTsygnał wydaje polecenie

$ kill -2 <pid>

Strona man określa tutaj :

Domyślnym sygnałem do zabicia jest TERM.

Strona zawiera również tabelę sygnałów, które możesz wysłać. Zgodnie z tą tabelą TERMjest 15, więc wszystkie są równoważne:

kill <pid>
kill -15 <pid>
kill -TERM <pid>

Uwaga 9 to KILLsygnał.

   Name   Number  Action
   -----------------------
   ALRM      14   exit
   HUP        1   exit
   INT        2   exit
   KILL       9   exit  this signal may not be blocked
   PIPE      13   exit
   POLL           exit
   PROF           exit
   TERM      15   exit     [Default]
   USR1           exit
   USR2           exit
   VTALRM         exit
   STKFLT         exit  may not be implemented
   PWR            ignore    may exit on some systems
   WINCH          ignore
   CHLD           ignore
   URG            ignore
   TSTP           stop  may interact with the shell
   TTIN           stop  may interact with the shell
   TTOU           stop  may interact with the shell
   STOP           stop  this signal may not be blocked
   CONT           restart   continue if stopped, otherwise ignore
   ABRT       6   core
   FPE        8   core
   ILL        4   core
   QUIT       3   core
   SEGV      11   core
   TRAP       5   core
   SYS            core  may not be implemented
   EMT            core  may not be implemented
   BUS            core  core dump may fail

   XCPU           core  core dump may fail
   XFSZ           core  core dump may fail
Mark Pim
źródło
8
Domyślny sygnał ( kill <pid>) to TERM.
heavyd
9
Liczby są zwykle, ale nie zawsze, takie same w różnych systemach uniksowych. Lepszą praktyką jest używanie nazwy sygnału. To znaczy, zamiast kill -9, użyj kill -KILL.
mpez0
7
Dodałbym, że sygnały KILLi STOPto tak zwane sygnały, których nie można złapać. Oznacza to, że gdy TERMsygnał jest wysyłany do procesu, jest on w stanie go złapać i wykonać różne operacje „wyłączania”, które musi wykonać. KILLSygnał natychmiast zatrzymuje proces.
Neo
5
Najlepiej najpierw użyć domyślnego sygnału, a -9, jeśli domyślny nie działa. Powodem tego jest to, że nie można złapać -9, więc program nie ma szansy na żadne czyszczenie. Dokumentacja sygnałów w systemie znajduje się również wman 7 signal
wstrzymana do odwołania.
7

Domyślnym sygnałem jest TERM, który pozwala programowi zabić, aby go złapać i wykonać pewne czyszczenie przed wyjściem. Program może go również zignorować, jeśli jest napisany w ten sposób.

Podanie wartości -9 lub KILL, ponieważ sygnał nie pozwala programowi go złapać, wykonać czyszczenia lub zignorować. Powinien być stosowany tylko w ostateczności.

Aby zobaczyć listę liczb i nazw sygnałów w Bash, użyj kill -l(letter ell).

Wstrzymano do odwołania.
źródło
4

Używam Ubuntu Linux.

Polecenia zabijania w zasadzie wysyłają sygnał do przetworzenia, aby go zakończyć. Aby uprościć złożone oczekiwania behawioralne codziennego obliczania, polecenie zabicia ma różne opcje.

Jak wyjaśniono powyżej ze wszystkimi opcjami numerów zabicia odpowiadającymi jego definicji.

Chciałbym dodać do niego kilka wierszy.

 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX    

Jak widać powyżej, są to wszystkie opcje zabicia, które otrzymasz, jeśli uruchomisz system Ubuntu Linux.

Ale niektóre sygnały zabicia są wspólne dla wszystkich smaków * NIX.

kill -9 jest opcją SIGKILL, a jądro nie może zignorować tego sygnału, co oznacza, że ​​honoruje tę opcję -9 lub SIGKILL i natychmiast kończy proces. Pamiętaj, że proces ten nie może być obsługiwany przez aplikacje.

Z drugiej strony kill -15 wyśle ​​sygnał SIGTERM, co oznacza, że ​​będzie czekał na całkowite zamknięcie procesu przed wyjściem. To jest sygnał domyślny.

irfan
źródło