Сторінка чоловіка Баша: вбити <pid> проти убити -9 <pid>


25

Моя сторінка man не підтверджує різницю між

kill <pid>

і

kill -9 <pid>

Оскільки це робиться по-різному, чому -9 не зафіксовано на сторінці kill? Я подумав, що, можливо, це речі, що стосуються оболонки, тому я також заглянув на сторінку баш-man, але не пощастило.

Питання про бонус: що робить -9?

Відповіді:


40

killпросто посилає сигнал заданому процесу. Повідомляє, -9який сигнал надіслати.

Різні числа відповідають різним загальним сигналам. SIGINT, наприклад, дорівнює 2, тому для надсилання процесу SIGINTсигнал видає команду

$ kill -2 <pid>

Сторінка керівництва тут вказується:

Сигналом для вбивства за замовчуванням є TERM.

На сторінці розміщена також таблиця сигналів, які ви можете надсилати. Згідно з цією таблицею 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

8
Сигналом за замовчуванням ( kill <pid>) є TERM.
важкий

9
Цифри зазвичай, але не завжди, однакові в різних системах на базі Unix. Краще застосовувати ім’я сигналу. Тобто замість kill -9 використовуйте kill -KILL.
mpez0

7
Я додам, що сигнали KILLта STOPсигнали - це так звані непридатні сигнали. Це означає, що коли TERMсигнал надсилається до процесу, він здатний вловити його і виконати різні операції "відключення", які йому потрібно зробити. KILLСигнал негайно зупиняє процес.
Нео

5
Найкраще спочатку використовувати сигнал за замовчуванням і використовувати лише -9, якщо типовий режим не працює. Причиною цього є те, що -9 не може бути спійманий, тому програма не має шансів зробити будь-яку очистку. Крім того, ви знаходите документацію для сигналів на вашій системі вman 7 signal
Призупинено до подальшого повідомлення.

7

Сигналом за замовчуванням є TERM, що дозволяє програмі вбивати, щоб схопити її та зробити чистку перед виходом. Програма може ігнорувати її, якщо вона написана саме так.

Вказавши -9 або KILL як сигнал, не дозволяє програмі вловлювати його, робити чистку чи ігнорувати. Його слід використовувати лише в крайньому випадку.

Щоб побачити список номерів та імен сигналів у Bash, використовуйте kill -l(літер ell).


4

Я використовую Ubuntu Linux.

Команди вбивства в основному посилають сигнал для обробки, щоб закінчити його. Для спрощення складних поведінкових очікувань щоденної команди обчислення вбивства разом із нею є різні варіанти.

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

Я хотів би додати до нього кілька рядків.

 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, це означає, що він буде чекати, коли процес буде чисто вимкнений перед виходом. Це сигнал за замовчуванням.

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