Чому число 9 в команді kill -9 в unix? [зачинено]


101

Я розумію, що це поза темою, я не міг ніде знайти в Інтернеті, і я думав, можливо, це можуть знати гуру програмування в громаді.
Я зазвичай використовую

kill -9 pid

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

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

Але, чому 9? а як щодо інших чисел? чи є якесь історичне значення або через архітектуру Unix?


6
Я думаю, що це питання краще належить до superuser.com
Rafał Rawicki

Відповіді:


89

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

Ви також можете використовувати мнемоніку як цифри:

kill -SIGKILL pid

6
Ще в той день (під яким я маю на увазі 4.xBSD або близько того) ви не змогли використовувати мнемоніку з командою shell, тому число 9 записується в дуже багато старих скриптів із запорошеною колодою.
zwol


50

Я думаю, що тут краще відповісти:

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

Де сигналом є або число, або ім'я сигналу, після якого іде процес Id (pid), на який буде спрямований сигнал.

Наприклад - -SIGKILL (або -9 ), сигнал вбиває процес негайно.

$ kill -SIGKILL 1001

і

$ kill -9 1001

обидві команди - це одне і те ж, тобто вище ми використовували "ім'я сигналу", а пізніше ми використовували "номер сигналу".

Вердикт : у кожного є відкритий вибір, чи використовувати "ім'я сигналу" або "номер сигналу" за допомогою команди kill .


19

Це посилання на "Революцію 9" від "Бітлз". Збірка спіртованих звукових кліпів і знайдених шумів, на цьому записі є Джон Леннон, що повторюється знов і знову "Число 9, Число 9 ..." Далі ця пісня привернула ще більше уваги в 1969 році, коли було виявлено, що Джон, граючи назад, здавався, сказати: "Увімкни мене, мертве ..."

Тому дев'ятий сигнал судився бути найбільш смертельним із сигналів вбивства.


17
Дійсно не можу сказати, чи витягуєте це з дупи, чи є шанс, що це правда.
Джонатан Райнхарт

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

Я дуже хочу, щоб це було правдою ... :)
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

навіщо вбивати -9: число 9 у списку сигналів було обрано як SIGKILL стосовно «вбити 9 життів кота».


3

SIGKILLвикористовувати для вбивства процесу. SIGKILLне можна ігнорувати чи обробляти. У Linux способи дати 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"signal_number" і вказує, що надіслане повідомлення про вбивство має бути типу KILL (не піддається запису, не ігнорується).

kill -9 pid

Що таке, як нижче.

kill -SIGKILL pid

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


0

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


0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.