2012-06-11 2 views
3

Я нахожусь в Centos 4 и использую kill (pid, 0) в своей программе на C++, чтобы проверить, есть ли в настоящее время процесс, выполняющийся с данным pid. Я начинаю подозревать, что есть условие гонки, когда вскоре после начала процесса есть небольшое окно времени, в котором kill (pid, 0) не возвращает ноль, даже несмотря на то, что на самом деле выполняется процесс.Is kill (pid, 0) гарантированно возвращает 0, если процесс существует?

Это известная проблема? Будет ли kill() когда-либо возвращать ненулевое значение, когда pid действительно существует, но только что был запущен? Если kill() не является надежным для проверки на существование, есть ли лучший способ выполнить этот тест?

ответ

0

kill(pid, 0) будет возвращать только 0, если процесс существует, и вы сможете отправить ему сигнал. Если процесс не запущен, как вы (и вы не являетесь пользователем root), тогда вызов завершится с -EPERM.

+0

Он также возвращает ESRCH, если нет такого pid. –

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