Разница между менее сильным сигналом убийства -HUP (1) -INT (2) и -TERM (15)

32

Помимо самого сильного kill -9(SIGKILL), я не совсем понимаю разницу между 3 другими общими сигналами ( здесь ) -HUP(1), -INT(2) и -TERM(15).

В каких случаях один из них будет работать, а другой нет?

В общем, когда -9( -KILL) не удается?

Мне кажется, они просят, чтобы процесс завершился изящно , без сохранения . Рейтинг грубости я бы поставил -HUP < -TERM < -INT < -KILL.

Kenny
источник
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 они обычно проверяют актуальность файла автосохранения.
Жиль "ТАК - перестань быть злым"