2015-08-27 5 views
2

Я искал в плагин Nagios, и я нашел этот код:Что такое нулевой сигнал?

killall -0 $1 

Я попробовал это, и он вернулся 0 для запущенного процесса, но не убить процесс.

Пожалуйста, объясните значение этого значения 0 и почему он не убил процесс.

ответ

2

сигнал -0 просто проверяет, работает ли указанный процесс. Это не убивает. Если вы хотите убить процесс, используйте , который является сигналом завершения.

Хотя -0 нет в списке, эта связь объясняет, что некоторые из других сигналов: http://man7.org/linux/man-pages/man7/signal.7.html

+2

Редко бывает, чтобы убить процесс с помощью SIGKILL (сигнал 9), потому что процесс не имеет возможности выполнить какую-либо очистку перед завершением. Это следует использовать только в качестве последнего средства, когда ни «SIGINT», ни «SIGTERM», похоже, не работают. –

0

От man 2 kill:

Если сиг равен 0, то никакой сигнал не посылается, но проверка ошибок по-прежнему выполняется ; это можно использовать для проверки наличия идентификатора процесса или идентификатора группы процессов.

kill(2) возвращается 0 на успех, и -1 иначе. Таким образом, с нулевым сигналом, считая, что процесс имеет достаточное разрешение для отправки сигнала в целевой процесс, возвращается 0, если существует идентификатор процесса или группы процессов, в противном случае он возвращает -1 (и устанавливает errno на ESRCH). Обратите внимание, что на странице man просто указано, что проверка ошибок по-прежнему выполняется, поэтому она вернет -1 и установит errno в EPERM, если целевой процесс существует, но процесс отправки не имеет достаточных разрешений для отправки ему сигнала.

killall(1) и kill(1) командные утилиты ведут себя аналогичным образом, так как они используют kill(2) под капотом.

Обратите внимание, что программный код не должен полагаться на это, чтобы принимать решения на основе существования процесса: всегда существует окно времени между проверкой того, существует ли процесс и с использованием той информации, в которой процесс может завершиться (и, возможно, новый, несвязанный процесс начинается в этом окне времени, и один и тот же PID перерабатывается и используется).

Смежные вопросы