После исследования демонов 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)
. Однако я хотел обратиться к этому процессу зомби, прежде чем рассматривать его.
Как я могу правильно реализовать пул внутри демона, чтобы избежать этого процесса зомби?