Я получаю много смешанных сообщений от людей, и мне было интересно, если это действительно не так много различий в том, что вы используете.
kill 'x'
killall 'x'
kill -9 'x'
Это некоторые варианты, которые мне уже сказали использовать, но некоторые люди говорят, что kill -9 - это просто перебор, kill сам по себе не работает и т. Д.
Есть ли у кого-нибудь совет, какой из них следует использовать в наиболее стандартном случае просто завершения процесса (и, следовательно, его состояния)?
[edit] Я ищу, что использовать, когда вы хотите остановить выполнение вашего процесса, чтобы вы могли запустить новый, с самого начала
SIGKILL
.kill -l
и преобразовать число в соответствующее имя сигнала, напримерkill -l 9
, вернетсяKILL
.Ответы:
Есть ряд сигналов, чье расположение по умолчанию - завершить процесс. Сигнал окончательного завершения - SIGKILL, так как он не может быть обработан, и у процесса нет иного выбора, кроме как умереть. Это, однако, также означает, что если вы отправите его, процесс лишится возможности очистки. Следовательно, хорошие манеры требуют посылки сигнала типа SIGTERM, который может быть обработан первым и только если процесс не завершится через некоторое время, отправьте его SIGKILL.
Обратите внимание, что SIGINT и SIGQUIT не являются хорошими кандидатами для произвольного завершения процесса. Из-за того, что они могут генерироваться с клавиатуры терминала, многие приложения используют их для специальных целей. Например, интерпретатор python использует SIGINT для генерации
KeyboardInterrupt
исключения (также в интерактивных сеансах python, когда он просто возвращается к приглашению), а JVM использует SIGQUIT для вывода следов стека. SIGINT и SIGQUIT остаются эффективными для большинства стандартных утилит командной строки, таких какfind
илиcat
.Во время выключения системы большинство систем UNIX и Linux отправляют SIGTERM всем процессам, затем 5 секунд ожидания, а затем SIGKILL. Это рекомендуемый способ безопасного завершения произвольного процесса.
Также обратите внимание, что даже SIGKILL не может завершить процесс, застрявший в непрерывном ожидании, пока процесс не проснется.
источник
kill -SIGTERM $pid; sleep 5; kill -SIGKILL $pid;
рекомендации?SIGHUP
приходит со дня, когда линии дозвона были обычным явлением. Этот сигнал был отправлен, чтобы указать, что линия зависла. Позже, когда это было менее распространеноSIGHUP
, демоны иногда использовали его для перечитывания файла конфигурации без перезапуска процесса. В эти современные временаSIGHUP
редко используется. Многие демоны будут иметь свой собственный способ повторной инициализации (т .apachectl graceful
rndc reconfig
[init.d|smf|upstart|launchd]
Вы должны начать с самого мягкого и перерасти оттуда. Это означает, SIGINT, SIGTERM, SIGQUIT, SIGKILL. Хотя большинство людей пропускают SIGINT и SIGQUIT.
источник