Чому я не повинен використовувати "kill -9" / SIGKILL


14

Опублікувавши це питання, тому що я був здивований, що не знайшов на нього прямо відповіді; вибачте, якщо це дублікат - я все-таки подивився!

Я чув це kill -9чи kill -SIGKILLпогано, але не розумію, чому. Якщо я не повинен робити, kill -9що мені робити, щоб вбити процес?


2
Попередження питання неправильне. SIGKILL - просто інструмент. Він рекомендується в деяких ситуаціях, а не в інших ситуаціях (як і всі інші інструменти).
kubanczyk

@kubanczyk впевнений, але це нечасто застосований інструмент і використовується без розуміння його мети. Я бачив багато тем, де А каже " Просто kill -9так ", ОП каже " чудово, що спрацювало! Я пам’ятаю, що відтепер! ", А Б приходить, щоб попередити " чекати kill -9небезпечно! " Лише після факту.
dimo414

Відповіді:


15

SIGKILLвитягує килим з вашого запущеного процесу, припиняючи його негайно. Для дуже простих програм це добре; на практиці, однак, існує дуже мало "простих" програм.

Під обкладинками навіть тривіально схожі програми виконують всілякі трансакційні роботи, від яких потрібно очистити їх до завершення (подумайте про finallyблок на Java та інших мовах програмування), такі як закриття ручок ресурсів, видалення тимчасових файлів та видалення даних з пам'ять на диск. Ви не можете передбачити, коли програма може робити щось подібне.

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

Вам майже ніколи не потрібно надсилати повідомлення SIGKILL, і ви повинні бути впевнені, що вичерпали свої альтернативи перед цим. У багатьох випадках перезавантаження (що в кінцевому підсумку буде надсилати SIGKILLs в недоброзичливі програми) безпечніше, ніж самовільне надсилання SIGKILL. Я, мабуть, можу з однієї сторони рахувати кількість разів, які мені потрібно було надіслати SIGKILL(і, швидше за все, все, що я роблю).

Взагалі, ви можете використовувати Ctrl+ C(що надсилає процес переднього плану a SIGINT) або SIGTERM(як у "завершити"), щоб доручити процесу зупинити те, що він робить, і вийти.

Деякі подальші читання:

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