Процесс-зомби в демоне многопроцессорной обработки python

После исследования демонов python, этот обход оказался наиболее надежным: http://www.jejik.com/articles / 2007/02 / a_simple_unix_linux_daemon_in_python /

Теперь я пытаюсь реализовать пул рабочих внутри класса демона, который, как мне кажется, работает (я не тщательно тестировал код), за исключением того, что при закрытии я получаю зомби-процесс. Я прочитал, что мне нужно дождаться кода возврата от ребенка, но я пока не понимаю, как мне это сделать.

Вот несколько фрагментов кода:

def stop(self):
    ...
    try:
        while 1:
            self.pool.close()
            self.pool.join()
            os.kill(pid, SIGTERM)
            time.sleep(0.1)
    ...

Здесь я попробовал os.killpg и ряд os.wait методов, но без улучшений. Я также играл с закрытием / присоединением пула до и после os.kill . Этот цикл в его нынешнем виде никогда не заканчивается, и как только он достигает os.kill , я получаю процесс зомби. self.pool = Pool (process = 4) встречается в разделе __ init __ демона. Из run (self) , которое выполняется после start (self) , я вызову self.pool.apply_async (self.runCmd, [cmd, 10], callback = self.logOutput) . Однако я хотел обратиться к этому процессу зомби, прежде чем рассматривать его.

Как я могу правильно реализовать пул внутри демона, чтобы избежать этого процесса зомби?

5
задан meagar 9 May 2012 в 16:44
поделиться