Что значит `убить -0 $PID-регулятора в shell-скрипт сделать?



в принципе, какой сигнал представляет '0', потому что здесь Я вижу номера сигналов, начиная с 1.

643   6  

6 ответов:

сигнал 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.
...

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

...может быть трудно найти документацию по этому специальному сигналу. Несмотря на то, что другие сказали, единственное упоминание об этом сигнале в 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: $?"

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

Kill -0 $pid-это проверка того, существует ли процесс с pid или нет.

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

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

  2. в случае зомби-процесса, для которого ребенок ждет родительского вызова wait. Вот он держит $pid и дают положительный результат, пока этот процесс не запущен.

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

Kill -0 $pid используется для проверки, если процесс, запущенный с $pid жив или нет. Но это может быть сложно, так как идентификатор процесса может быть переназначен после выхода процесса и запуска нового процесса. Можно использовать killall -0, чтобы получить о конкретном процессе работает или нет.

Comments

    Ничего не найдено.