Как определить, жив ли процесс? Python 2.6, unix

Как определить, жив ли процесс? Python 2.6, unix

30.01.2013 06:24:47 Просмотров 15 Источник

Вопрос тут появляется в похожем виде не впервые. Столкнулся со следующей проблемой: нужно проверять не только существование процесса, но и то, что он не является зомби.

try:
    os.kill(pid, 0)
    return True
except OSError:
    return False

Вариант выше знаю, он не прокатывает с последним условием. Ставить внешние программы/модули нельзя, все это происходит на разных машинах под линуксом и BSD, рутового доступа на которые нету. Есть какие-нибудь варианты, как решить проблему?

У вопроса есть решение - Посмотреть?

Ответы - Как определить, жив ли процесс? Python 2.6, unix / Как определить, жив ли процесс? Python 2.6, unix

Является ответом!
AlexDenisov

30.01.2013 06:32:58

Можно чисто средствами баша

ps aux | awk ' { print $2" "$8 } ' | grep -q "$pid Z"

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

https://ru.stackoverflow.com/questions/188426/%d0%9a%d0%b0%d0%ba-%d0%be%d0%bf%d1%80%d0%b5%d0%b4%d0%b5%d0%bb%d0%b8%d1%82%d1%8c-%d0%b6%d0%b8%d0%b2-%d0%bb%d0%b8-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d1%81-python-2-6-unix/188432#comment188466_188432
работает, спасибо)
https://ru.stackoverflow.com/questions/188426/%d0%9a%d0%b0%d0%ba-%d0%be%d0%bf%d1%80%d0%b5%d0%b4%d0%b5%d0%bb%d0%b8%d1%82%d1%8c-%d0%b6%d0%b8%d0%b2-%d0%bb%d0%b8-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d1%81-python-2-6-unix/188432#comment188468_188432
Хм, есть ненулевая вероятность того, что за время после смерти старого процесса стартует новый процесс, и он получит тот же id. (Новым процессом может быть, например, sh, ps, awk или grep.)
https://ru.stackoverflow.com/questions/188426/%d0%9a%d0%b0%d0%ba-%d0%be%d0%bf%d1%80%d0%b5%d0%b4%d0%b5%d0%bb%d0%b8%d1%82%d1%8c-%d0%b6%d0%b8%d0%b2-%d0%bb%d0%b8-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d1%81-python-2-6-unix/188432#comment188471_188432
@VladD, насколько я помню, пока не достигнут предел PID, каждый новый процесс получает новый номер.
https://ru.stackoverflow.com/questions/188426/%d0%9a%d0%b0%d0%ba-%d0%be%d0%bf%d1%80%d0%b5%d0%b4%d0%b5%d0%bb%d0%b8%d1%82%d1%8c-%d0%b6%d0%b8%d0%b2-%d0%bb%d0%b8-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d1%81-python-2-6-unix/188432#comment188479_188432
@mikillskegg: правда? не знал, тогда всё в порядке, вероятность можно считать нулём :)
Закрыть X