Подтвердить что ты не робот

Что делает `kill -0 $pid` в оболочке script делать?

В принципе, какой сигнал имеет значение '0', потому что здесь Я вижу цифры СИГНАЛА, начиная с 1.

4b9b3361

Ответ 1

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

Для получения дополнительной информации см. следующие справки:

убить (1)
$ man 1 kill
...
If sig is 0, then no signal is sent, but error checking is still performed.
...
убить (2)
$ man 2 kill
...
If sig is 0, then no signal is sent, but error checking is still performed; this 
can be used to check for the existence of a process ID or process group ID.
...

Ответ 2

Это хороший вопрос, потому что...

... может быть сложно найти документацию по этому специальному сигналу. Несмотря на то, что говорили другие, единственное упоминание этого сигнала в man 1 kill в системах на базе Debian:

Особенно полезными сигналами являются HUP, INT, KILL, STOP, CONT и 0.

Не особенно полезно, особенно если вы еще не знаете, что делает сигнал. Он также не указан в выводе kill -l, поэтому вы не будете знать об этом, если вы уже не знаете об этом.

Где найти его документально

В системах Debian и Ubuntu вывод man 2 kill говорит, в частности:

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

Что это хорошо для

Вы можете использовать kill -0, чтобы проверить, запущен ли процесс. Рассмотрим эти примеры.

# Kill the process if it exists and accepts signals from
# the current user.
sleep 60 &
pid=$!
kill -0 $pid && kill $pid

# Check if a PID exists. When missing, this should result
# in output similar to:
#    bash: kill: (6228) - No such process
#    Exit status: 1
kill -0 $pid; echo "Exit status: $?"

Вы также можете использовать kill -0, чтобы определить, имеет ли текущий пользователь разрешения передавать сигнал данному процессу. Например:

# See if you have permission to signal the process. If not,
# this should result in output similar to:
#     bash: kill: (15764) - Operation not permitted
#     Exit status: 1
sudo sleep 60 &
kill -0 $!; echo "Exit status: $?"

Ответ 3

Эта команда проверяет, работает ли процесс с PID в $pid.

Ответ 4

http://djangstorm.com/Content/kill.html. Проверка ошибок, здесь относится к привилегиям, доступным для выполнения команды пользователем.

Ответ 5

Kill -0 $pid - проверить, существует ли процесс с pid.

Будьте внимательны при использовании 'kill -0 $pid', чтобы проверить существование процесса, потому что

  • После того, как запланированный процесс выйдет, его pid может быть выделен для другого вновь созданного процесса. (Таким образом, нельзя быть уверенным, что конкретный процесс жив или нет)

  • В случае процесса Zombie, для которого дочерний объект ожидает, чтобы родительский вызов вызывал ожидание. Здесь он удерживает $pid и дает положительный результат, пока этот процесс не работает.