Різниця між менш насильницьким сигналом вбивства -HUP (1) -INT (2) та -TERM (15)


32

Окрім найбільш жорстоких kill -9(SIGKILL), я не зовсім розумію різницю між 3 іншими загальними сигналами ( тут ) -HUP(1), -INT(2) та -TERM(15).

За яких сценаріїв одна робота, а інша ні?

Загалом, коли -9( -KILL) не вдається?

Мені, здається, вони просять процес закінчити витончено , не економивши . Я б сказав, що оцінюють суворість -HUP < -TERM < -INT < -KILL.


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

Відповіді:


52

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

Поведінка SIGINT, SIGTERM, SIGQUIT і SIGHUP за замовчуванням - це вбити програму. Однак програмам дозволяється встановлювати обробник цих сигналів. Отже, власне поведінка додатків, коли вони отримують ці сигнали, є питанням конвенції (якої кожна програма може чи не може дотримуватися), а не дизайну системи.

SIGINT - "найслабший" з партії. Її загальноприйняте значення - «зупинити те, що ти зараз робиш, і чекати подальшого введення користувача». Це сигнал, що генерується Ctrl+ Cв терміналі. Неінтерактивні програми, як правило, трактують це як SIGTERM.

SIGTERM - це "нормальний" сигнал вбивства. Це повідомляє програмі вийти чисто. Програмі може знадобитися час, щоб зберегти її стан, звільнити ресурси, такі як тимчасові файли, які в іншому випадку залишаться позаду тощо. Додаток, який не хоче перериватись під час критичної програми, може ігнорувати SIGTERM на деякий час.

SIGHUP - це приблизно те саме, що і SIGTERM з точки зору жорсткості, але він має певну роль, оскільки він автоматично надсилається програмам, що працюють в терміналі, коли користувач відключається від цього терміналу (етимологічно, тому що користувач підключався через телефонну лінію та модем повісив). SIGHUP часто мимовільний, на відміну від SIGTERM, який повинен бути надісланий явно, тому програми повинні намагатися зберегти свій стан на SIGHUP. SIGHUP також має зовсім інше загальноприйняте значення для програм , що не відносяться до користувачів ( демонів ), тобто перезавантажити їх конфігураційний файл.

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


Чи можете ви детальніше зупинитися на "збереженні їх держави"? Якщо я перебуваю в текстовому редакторі і вбиваю його, я вважаю, що вміст не зберігається.
Кенні

2
@Kenny Більшість редакторів не збереже файл, оскільки, можливо, ви внесли тимчасові зміни, які ви не збиралися зберігати. Розширені редактори (наприклад, vi, emacs) мають файл автоматичного збереження, де вони час від часу зберігають дані; на SIGHUP вони, як правило, переконуються, що файл автоматичного збереження є актуальним.
Жил "ТАК - перестань бути злим"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.