Страница Man Bash: kill <pid> против kill -9 <pid>

25

Моя справочная страница не документирует разницу между

kill <pid>

а также

kill -9 <pid>

Так как они делают разные вещи, почему -9 не задокументировано на killстранице руководства ? Я подумал, что, возможно, это были специфические вещи для оболочки, поэтому я тоже заглянул на страницу руководства bash, но не повезло.

Бонусный вопрос: что делает -9?

sixtyfootersdude
источник

Ответы:

40

killпросто посылает сигнал данному процессу. Он -9сообщает, какой сигнал отправить.

Разные числа соответствуют разным общим сигналам. SIGINTнапример, равен 2, поэтому для отправки процесса SIGINTсигнал выдаст команду

$ kill -2 <pid>

На странице руководства здесь указано:

Сигнал по умолчанию для kill - TERM.

Страница man также предоставляет таблицу сигналов, которые вы можете отправить. Согласно этой таблице, TERMявляется 15, таким образом , они эквивалентны:

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

Уведомление 9 - это KILLсигнал.

   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
Марк Пим
источник
8
Сигнал по умолчанию ( kill <pid>) - TERM.
тяжело
9
Числа обычно, но не всегда, одинаковы в разных системах на основе Unix. Лучше использовать имя сигнала. То есть вместо kill -9 используйте kill -KILL.
mpez0
7
Я хотел бы добавить , что KILLи STOPсигналы так называемых не-catchable сигналы. Это означает, что когда TERMсигнал отправляется процессу, он может его перехватить и выполнить различные операции «выключения», которые ему необходимо выполнить. KILLСигнал немедленно останавливает процесс.
Нео
5
Лучше всего сначала использовать сигнал по умолчанию и использовать -9, только если сигнал по умолчанию не работает. Причина этого в том, что -9 не может быть пойман, поэтому у программы нет шансов выполнить какую-либо очистку. Кроме того, вы найдете документацию для сигналов в вашей системе вman 7 signal
Приостановлено до дальнейшего уведомления.
7

Сигнал по умолчанию - TERM, который позволяет убиваемой программе перехватить его и выполнить некоторую очистку перед выходом. Программа также может игнорировать это, если она написана таким образом.

Указание -9 или KILL в качестве сигнала не позволяет программе перехватить его, выполнить очистку или игнорировать его. Это следует использовать только в качестве крайней меры.

Чтобы увидеть список чисел и имен сигналов в Bash, используйте kill -l(буква ell).

Приостановлено до дальнейшего уведомления.
источник
4

Я использую Ubuntu Linux.

Команды Kill в основном посылают сигнал процессу, чтобы закончить его. Для упрощения сложных поведенческих ожиданий в повседневных вычислениях команда kill имеет различные опции.

Как объяснено выше со всеми вариантами уничтожения чисел, соответствующими его определению.

Я хотел бы добавить несколько строк к нему.

 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    

Как вы видите выше, это все опции уничтожения, которые вы получите, запустив Ubuntu Linux.

Но определенные сигналы уничтожения являются общими для всех разновидностей * NIX.

kill -9 - это опция SIGKILL, и ядро ​​не может игнорировать этот сигнал, то есть имеет честь использовать эту опцию -9 или SIGKILL и немедленно завершить процесс. Помните, что этот процесс не может быть обработан прикладными программами.

kill -15, с другой стороны, отправит сигнал SIGTERM, а это означает, что он ожидает, пока процесс полностью не остановится, перед выходом. Это сигнал по умолчанию.

ирфан
источник