Почему число 9 в команде kill -9 в unix? [закрыто]


101

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

kill -9 pid

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

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

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


6
Я думаю, что этот вопрос лучше принадлежит superuser.com
Рафал Равицкий

Ответы:


91

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

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

kill -SIGKILL pid

6
Раньше (я имею в виду 4.xBSD или около того) вы не могли использовать мнемонику с командой оболочки, поэтому цифра 9 записана в очень большом количестве старых сценариев оболочки с пыльной декой.
zwol


52

Думаю, лучший ответ здесь такой:

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 (стр. 388) :

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


32

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

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

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

Мы можем использовать несколько типов сигналов - чтобы получить полный список всех доступных / возможных сигналов, используйте команду « $ kill -l »: введите описание изображения здесь

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

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

Есть несколько методов передачи сигналов программе или сценарию. Один из часто используемых методов отправки сигнала - это использование команды kill - основной синтаксис:

$ kill -signal pid

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

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

$ kill -SIGKILL 1001

и

$ kill -9 1001

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

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


19

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

Следовательно, девятому сигналу суждено было стать самым смертоносным из сигналов уничтожения.


17
На самом деле не могу сказать, вытаскиваете ли вы это из своей задницы, или есть шанс, что это правда.
Джонатон Рейнхарт

Конец этой темы действительно эпичен, особенно два предыдущих комментария. Я также наткнулся на ту статью об убийстве и о том, какую последовательность использовать: pthree.org/2012/08/14/appgotiation-use-of-kill-9-pid
Gull_Code 05

Я так хочу, чтобы это было правдой ... :)
nafas

Человек, говорящий «номер 9», не Леннон. Я подозреваю, что в остальной части истории столько же правды (т.е. ее нет), но кто знает :)
Стивен Кеннеди,

8

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


2
Также вызывается базовый системный вызов, который отправляет сигналы kill. Вероятно, потому что поведение по умолчанию для большей части исходного набора сигналов (номера от 1 до 15) заключалось в завершении процесса.
zwol

4

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


3

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


3

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

kill -9 <process_pid> 
kill -SIGKILL <process_pid> 
killall -SIGKILL <process_name>
killall -9 <process_name>

1

Введите команду kill -l в вашей оболочке

вы обнаружите, что под 9-м номером [ 9) SIGKILL ], поэтому можно использовать kill -9 или kill -SIGKILL

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


1

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

kill -9 pid

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

kill -SIGKILL pid

Без указания signal_number значение по умолчанию -15, что является TERM (сигнал завершения программного обеспечения). Набор kill <pid>такой же, как kill -15 <pid>.


0

Оба они такие же, как kill -sigkill processID, kill -9 processID. В основном это для принудительного прекращения процесса.


0

есть процесс, который нельзя убить, например "kill% 1". если нам нужно завершить этот процесс, используется специальная команда, чтобы убить этот процесс, который является kill -9. например, откройте vim и остановитесь, если с помощью ctrl + z затем увидите задания и после применения процесса kill этот процесс не будет завершен, поэтому здесь мы используем команду kill -9 для завершения.

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