Есть ряд сигналов, чье расположение по умолчанию - завершить процесс. Сигнал окончательного завершения - SIGKILL, так как он не может быть обработан, и у процесса нет иного выбора, кроме как умереть. Это, однако, также означает, что если вы отправите его, процесс лишится возможности очистки. Следовательно, хорошие манеры требуют посылки сигнала типа SIGTERM, который может быть обработан первым и только если процесс не завершится через некоторое время, отправьте его SIGKILL.
Обратите внимание, что SIGINT и SIGQUIT не являются хорошими кандидатами для произвольного завершения процесса. Из-за того, что они могут генерироваться с клавиатуры терминала, многие приложения используют их для специальных целей. Например, интерпретатор python использует SIGINT для генерации KeyboardInterrupt
исключения (также в интерактивных сеансах python, когда он просто возвращается к приглашению), а JVM использует SIGQUIT для вывода следов стека. SIGINT и SIGQUIT остаются эффективными для большинства стандартных утилит командной строки, таких как find
или cat
.
Во время выключения системы большинство систем UNIX и Linux отправляют SIGTERM всем процессам, затем 5 секунд ожидания, а затем SIGKILL. Это рекомендуемый способ безопасного завершения произвольного процесса.
Также обратите внимание, что даже SIGKILL не может завершить процесс, застрявший в непрерывном ожидании, пока процесс не проснется.
SIGKILL
.