Почему номер 9 в команде kill -9 в unix? - PullRequest
90 голосов
/ 31 марта 2012

Я понимаю, что это не по теме, я нигде не мог найти в Интернете, и я думал, может быть, гуру программирования в сообществе могли бы знать это.
Я обычно использую

kill -9 pid

чтобы убить работу. Я всегда задавался вопросом о происхождении 9. Я посмотрел его онлайн, и там написано

"9 означает сигнал KILL, который не может быть перехвачен или игнорируется. Другими словами, он будет сигнализировать процессу (некоторое запущенное приложение) о немедленном выходе" (источник: http://wiki.answers.com/Q/What_does_kill_-9_do_in_unix_in_its_entirety)

Но почему 9? а как насчет других номеров? есть ли какое-то историческое значение или из-за архитектуры Unix?

Ответы [ 13 ]

82 голосов
/ 31 марта 2012

См. статью в википедии о сигналах Unix для получения списка других сигналов. Сигкилл только что получил номер 9.

Вы также можете использовать мнемонику, как числа:

kill -SIGKILL pid
71 голосов
/ 31 марта 2012

Сначала было 8 других сигналов.

46 голосов
/ 13 ноября 2013

Я думаю, что лучший ответ здесь просто:

mike@sleepycat:~☺  kill -l
 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    

Что касается "значимости" 9 ... я бы сказал, что, вероятно, ее нет. Согласно Интерфейс программирования Linux (p 388) :

Каждый сигнал определяется как уникальное (маленькое) целое число, начиная последовательно от 1. Эти целые числа определены в символические названия формы SIGxxxx. Поскольку фактические цифры, использованные для каждый сигнал варьируется в зависимости от реализации , именно эти символические имена которые всегда используются в программах.

29 голосов
/ 27 февраля 2015

Сначала вам нужно узнать, что такое Сигналы в Unix-подобных системах (это займет всего несколько минут).

Сигналы , являютсяпрограммные прерывания, отправленные (работающей) программе, чтобы указать, что произошло важное событие.

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

Существует несколько типов сигналов, которые мы можемиспользуйте - чтобы получить полный список всех доступных / возможных сигналов, используйте команду " $ kill -l ": enter image description here

В приведенном выше выводе ясно видно, что каждый сигнал имеет' номер сигнала ' (например, 1, 2, 3) и ' имя сигнала ' (например, SIGUP, SIGINT, SIGQUIT), связанные с ним.Для подробного изучения того, что делает каждый сигнал, перейдите по этой ссылке .

Наконец, перейдя к вопросу "Почему число 9 в команде kill -9 ":

Существует несколько способов доставки сигналов в программу или скрипт.Один из обычно используемых методов отправки сигнала - использование команды kill - основной синтаксис:

$ kill -signal pid

Где сигнал - это либо число , либо имя сигнала, за которым следует идентификатор процесса (pid), на который будет отправлен сигнал.

Например - -SIGKILL (или -9 ), сигнал немедленно убивает процесс.

$ kill -SIGKILL 1001

и

$ kill -9 1001

обе команды - это одно и то же, то есть выше мы использовали «имя сигнала», и позже мыиспользовали «номер сигнала».

Вердикт : Один из них имеет открытый выбор: использовать «имя сигнала» или «номер сигнала» с командой kill .

18 голосов
/ 15 января 2013

Это ссылка на "Revoulution 9" от "Битлз".Коллекция из соединенных воедино звуковых клипов и найденных шумов. В этой записи Джон Леннон повторяет снова и снова «Номер 9, Номер 9 ...». Далее, эта песня привлекла дополнительное внимание в 1969 году, когда было обнаружено, что при воспроизведении назад Джонговорить "Включи меня, мертвец ..."

Поэтому девятый сигнал должен был стать самым смертоносным из сигналов убийства.

7 голосов
/ 31 марта 2012

Существует очень длинный список сигналов Unix, который вы можете просмотреть в Википедии . Несколько запутанно, вы можете использовать kill для отправки любого сигнала процессу. Например, kill -SIGSTOP 12345 заставляет процесс 12345 приостанавливать свое выполнение, а kill -SIGCONT 12345 указывает возобновить его. Немного менее загадочная версия kill -9 - kill -SIGKILL.

4 голосов
/ 31 марта 2012

Я не думаю, что для числа 9 есть какое-либо значение. Кроме того, несмотря на распространенное мнение, kill используется не только для уничтожения процессов, но и для отправки сигнала процессу.Если вам действительно любопытно, вы можете прочитать здесь и здесь .

1 голос
/ 26 мая 2018

зачем убивать -9: число 9 в списке сигналов было выбрано как SIGKILL в отношении «убить 9 жизней кошки».

1 голос
/ 04 апреля 2018

SIGKILL использовать, чтобы убить процесс.SIGKILL нельзя игнорировать или обрабатывать.В линуксе способы дать SIGKILL.

kill -9 <process_pid> 
kill -SIGKILL <process_pid> 
killall -SIGKILL <process_name>
killall -9 <process_name>
0 голосов
/ 28 мая 2017

-9 - это номер_сигнала, который указывает, что отправляемое сообщение об уничтожении должно быть типа KILL (не подлежит захвату, не игнорируется).

kill -9 pid

То же, что и ниже.

kill -SIGKILL pid

Без указания номера_сигнала по умолчанию используется -15, то есть TERM (сигнал завершения программы).Ввод kill <pid> совпадает с kill -15 <pid>.

...