Страница Man Bash: kill <pid> против kill -9 <pid>
Моя справочная страница не документирует разницу между
kill <pid>
а также
kill -9 <pid>
Так как они делают разные вещи, почему -9 не задокументировано в kill
страница руководства? Я подумал, что, возможно, это были специфические вещи для оболочки, поэтому я тоже заглянул на страницу руководства bash, но не повезло.
Бонусный вопрос: что делает -9?
3 ответа
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
Сигнал по умолчанию - TERM, который позволяет убиваемой программе перехватить его и выполнить некоторую очистку перед выходом. Программа также может игнорировать это, если она написана таким образом.
Указание -9 или KILL в качестве сигнала не позволяет программе перехватить его, выполнить очистку или игнорировать его. Это следует использовать только в качестве крайней меры.
Чтобы увидеть список номеров и имен сигналов в Bash, используйте kill -l
(буква элл).
Я использую 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, а это означает, что он ожидает, пока процесс полностью не остановится, перед выходом. Это сигнал по умолчанию.