Помимо самого сильного kill -9
(SIGKILL), я не совсем понимаю разницу между 3 другими общими сигналами ( здесь ) -HUP
(1), -INT
(2) и -TERM
(15).
В каких случаях один из них будет работать, а другой нет?
В общем, когда -9
( -KILL
) не удается?
Мне кажется, они просят, чтобы процесс завершился изящно , без сохранения . Рейтинг грубости я бы поставил -HUP < -TERM < -INT < -KILL
.
HUP
не обязательно означает, что программа будет завершена. Некоторые программы используютSIGHUP
для перезагрузки файлов конфигурации.SIGKILL
отказывает, или, скорее, откладывается, когда процесс находится в непрерывном сне .Ответы:
SIGKILL никогда не перестает убивать запущенный процесс, в этом все дело. Существуют и другие сигналы, чтобы дать приложению возможность реагировать.
Поведение SIGINT, SIGTERM, SIGQUIT и SIGHUP по умолчанию - уничтожение программы. Однако приложениям разрешается устанавливать обработчик для этих сигналов. Таким образом, фактическое поведение приложений, когда они получают эти сигналы, является условием (которому может следовать каждое приложение, а может и не следовать), а не дизайном системы.
SIGINT - самый слабый из всех. Его традиционное значение - «остановите то, что вы делаете прямо сейчас, и ждите дальнейшего ввода пользователя». Это сигнал, генерируемый Ctrl+ Cв терминале. Неинтерактивные программы обычно воспринимают это как SIGTERM.
SIGTERM - это «нормальный» сигнал уничтожения. Это говорит приложение, чтобы выйти чисто. Приложению может потребоваться время для сохранения его состояния, для освобождения ресурсов, таких как временные файлы, которые иначе остались бы позади, и т. Д. Приложение, которое не хочет прерываться во время критического приложения, может некоторое время игнорировать SIGTERM.
SIGHUP примерно такой же, как и SIGTERM, с точки зрения жесткости, но он играет особую роль, поскольку он автоматически отправляется приложениям, работающим в терминале, когда пользователь отключается от этого терминала (этимологически, потому что пользователь подключался через телефонную линию и модем повесить трубку). SIGHUP часто является непроизвольным, в отличие от SIGTERM, который должен отправляться явно, поэтому приложения должны пытаться сохранить свое состояние на SIGHUP. SIGHUP также имеет совершенно другое традиционное значение для не-ориентированных на пользователя приложений ( демонов ), которое заключается в перезагрузке их файла конфигурации.
SIGQUIT - самый грубый из игнорируемых сигналов. Он предназначен для использования, когда приложение ведет себя неправильно и его нужно сейчас убить, и по умолчанию оно традиционно оставляет файл дампа ядра (современные системы, где большинство пользователей не знают, что такое файл ядра, обычно не создают их по умолчанию) , Приложения могут устанавливать обработчик, но должны делать очень мало (в частности, не сохранять никакого состояния), потому что намерение SIGQUIT должно использоваться, когда что-то серьезно не так.
источник