Гарантированно ли kill(pid, 0) возвращает 0, если процесс существует?

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

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


person WilliamKF    schedule 11.06.2012    source источник


Ответы (1)


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

person Community    schedule 11.06.2012
comment
Он также возвращает ESRCH, если такого pid нет. - person Sergei Nikulov; 11.06.2012