Яка мета параметра -9 у команді kill?


Відповіді:


28

Сторінка Ubuntu man killпояснює призначення -9комутатора (правда, досить спритно):

Name     Num   Action    Description
KILL       9   exit      cannot be blocked

Ось що говорить інша сторінка чоловіка

Команда killпосилає зазначений сигнал вказаному процесу або групі процесів. Якщо сигнал не вказаний, TERMсигнал надсилається. TERMСигнал буде вбивати процеси , які не впіймати цей сигнал. Для інших процесів може знадобитися використання сигналу KILL( 9), оскільки цей сигнал неможливо перехопити.


Тому використання -9перемикача гарантує, що процес ефективно загине. Навіть незважаючи на те, що заморожений або невідповідний процес може не реагувати на простий TERM сигнал, він загине при надсиланні KILLсигналу.


40

Команда kill посилає визначений сигнал процесу з заданою ідентичністю (PID):

kill -<signal> <pid>

Звичайно, ми можемо вбивати лише процеси, якими ми володіємо, тоді як root може вбивати всі процеси. Дивіться у Вікіпедії, щоб отримати хороший підсумок обчислювальних сигналів.

Сигнали killможуть відправити перераховані в сторінках керівництва . Сигнал може бути представлений назвою або номером. Якщо сигнал не подано, сигнал за замовчуванням 15, відповідно. TERMвикористовується.

Тому всі три команди нижче однакові:

kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234

Різниця між SIGTERMта SIGKILLполягає у тому, як програма може діяти на сигнал:

  • TERM: додаток зможе завершити роботу, тобто належним чином виконати процедуру відключення.
  • KILL: програми зупиняються та вбиваються негайно (що може призвести до втрати даних або збільшення можливості повідомляти про передбачуваний збій у деяких випадках).

16

Зауважте, що всі наступні є синонімами:

kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234

Варто зазначити, що у світі обробки сигналів SIGKILL - один з небагатьох унікальних, якими керує операційна система, а не програма. Під час запуску kill -9ви не говорите програмі самозавершуватися, а наказуєте ОС припинити запуск програми, незалежно від того, що вона робить.

Після відправлення SIGKILL програма буде негайно зупинена. Якщо будь-які дзвінки ядра виконуються (наприклад, файл IO) від імені програми, ці дзвінки можуть продовжуватися, а не можуть продовжуватися, доки вони не завершаться, залежно від виклику, але сама програма більше не буде виконуватись. Зауважте, що простежені завдання чи завдання, що працюють під налагоджувачем, тут можуть вести себе по-різному.

Інший сигнал, який неможливо заблокувати, - це SIGSTOP, який має подібний ефект, але замість цього заморожує програму; ви можете надіслати SIGCONT пізніше, щоб відновити його. Така поведінка повністю контролюється ОС, і програма не отримує попереднього повідомлення.

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

Ось декілька корисних сигналів, які можуть виявити вас надсиланням до процесу:

  • SIGHUP - призупинення
    Повідомляє програму, яку користувач відключив (наприклад, сеанс SSH або вікно терміналу було закрито).
    Зазвичай робить витончене відключення програми.
  • SIGINT - переривання
    Надіслане, коли ви натискаєте CTRL+ C
    Зазвичай означає "зупинити те, що ви робите" - може або не може вбити програму
  • SIGTERM - скасувати
    За замовчуванням, надісланим killі killall.
    Зазвичай припиняє програму ... іноді після закінчення програми все, що вона робить.
  • SIGSTOP - зупиняє
    надіслане, якщо натиснути CTRL+ Z
    Призупинити програму, обговорену вище
  • SIGPIPE - труба закрита
    Повідомляє програму, що трубопровід закрився. Зазвичай припиняє програму.
    Наприклад, cat /etc/passwd | head -n1буде відправлено SIGPIPE в catпроцес після друку першого рядка, що призведе catдо припинення, перш ніж закінчити весь файл.

Хоча всі ці сигнали відбуваються "природним шляхом" у власних налаштуваннях, ви можете використовувати сигнал для підробки умови для досягнення бажаного результату.

Наприклад, якщо ви хочете припинити чийсь сеанс SSH, ви можете просто вбити процес, але тим самим ви запобіжете оновити його файл ІСТОРІЯ, що може бути важливим з міркувань безпеки. Але замість цього, якщо ви надішлете його SIGHUP , процес припустить, що з'єднання загинуло, і він виконає стандартне очищення.


Ctrl + \ посилає SIGQUIT, де типовою дією є скидання ядра та завершення. Це можна використовувати, якщо програма робить щось дуже неправильно, вам потрібно негайно зупинити це, і ви хочете мати можливість налагодити це пізніше.
Саймон Ріхтер

@SimonRichter О, ти маєш рацію. фіксований.
tylerl

6

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

Використання: SIGKILL поодинокі

Значення вбивства : Команда kill без жодного сигналу передає сигнал 15, який припиняє процес нормальним способом.

Використання: сигнал SIGTERM , яким можуть управляти програмісти

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