'-9' - это флаг, чтобы убить команду?


14

Что делает -9?

Это не отображается в синтаксисе:

$ kill
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
$

10
-9является экземпляром -sigspec, это эквивалентно -s 9или -n 9или -s KILLили или -KILL.
Жиль "ТАК - перестань быть злым"

Ответы:


21

-9это номер сигнала (в данном случае SIGKILL), поэтому kill -9отправляет SIGKILLв рассматриваемый процесс.

Этот сигнал вызывает немедленное завершение процесса (если он не ожидает в функции ядра). Сигнал не может быть ни проигнорирован, ни процесс приема не может выполнить какое-либо действие по очистке после получения сигнала (то есть обработчик сигнала для SIGKILLне вызывается). Смотрите также статью в Википедии о SIGKILL .

Со страницы руководства моей killкоманды (Linux):

   The  default  signal  for  kill is TERM. Use -l or -L to list available
   signals.  Particularly useful signals include  HUP,  INT,  KILL,  STOP,
   CONT,  and  0.   Alternate  signals  may be specified in three ways: -9
   -SIGKILL -KILL.

РЕДАКТИРОВАТЬ : kill -l( bashвстроенная команда) перечисляет следующие имена сигналов и числовые значения в моей системе:

 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

1
В Debian также kill -lперечислены числовые значения. Какая у тебя ОС?
Фахим Митха

интересно, я использую Ubuntu (насколько я знаю, он основан на Debian). С другой стороны, я просто заметил, что в man killсписке числовые значения для некоторых сигналов.
Андре Хольцнер

Ну, killэто в procpsверсии, которая 1:3.2.8-9в Debian сжать. И да, Ubuntu - это в основном Debian. Поэтому мне интересно, почему kill -lне возвращается то же самое.
Фахим Митха

1
оказывается, что я выполнял zshвстроенную killкоманду, а не /bin/kill(которая фактически перечисляет числовые значения, как вы говорите)
Andre Holzner

5
@FaheemMitha Есть две причины, по которым оболочка нуждается во killвстроенном. Это позволяет killкоманде принимать рабочие номера или имена (например kill %1). И это позволяет killиспользовать, даже если был достигнут некоторый предел количества процессов.
Жиль "ТАК - перестать быть злым"

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.