为什么我不收割僵尸进程? (CentOS Linux, python)
Why am I not reaping zombie processes? (CentOS Linux, python)
我正在使用进程池。直到最近,这个逻辑似乎一直有效。
pool = multiprocessing.Pool(processes = 2*multiprocessing.cpu_count())
for p in processArgs:
pool.apply_async(myFunc, p)
pool.close()
pool.join()
现在看来,当这是 运行 时,我最终所有子进程都处于失效状态,而父进程似乎还没有执行 pool.join()
(基于 a
) 已停用进程仍然存在的事实和 b
) 接下来发生的逻辑似乎没有执行的事实。
死掉的进程是僵尸,对吧?这意味着他们已经死了但还没有被收割,对吗?
虽然我不完全理解,但问题是我正在从我的一个子进程调用 sys.exit() 。这不是退出子进程的正确方法,应该调用 os._exit() :whosebug.com/questions/19747371
sys.exit() 在退出前先做一堆清理:也许它在尝试执行一些清理时卡住了,而父进程正在等待加入它。
欢迎提供额外的解释,我可以编辑这个答案。
我正在使用进程池。直到最近,这个逻辑似乎一直有效。
pool = multiprocessing.Pool(processes = 2*multiprocessing.cpu_count())
for p in processArgs:
pool.apply_async(myFunc, p)
pool.close()
pool.join()
现在看来,当这是 运行 时,我最终所有子进程都处于失效状态,而父进程似乎还没有执行 pool.join()
(基于 a
) 已停用进程仍然存在的事实和 b
) 接下来发生的逻辑似乎没有执行的事实。
死掉的进程是僵尸,对吧?这意味着他们已经死了但还没有被收割,对吗?
虽然我不完全理解,但问题是我正在从我的一个子进程调用 sys.exit() 。这不是退出子进程的正确方法,应该调用 os._exit() :whosebug.com/questions/19747371
sys.exit() 在退出前先做一堆清理:也许它在尝试执行一些清理时卡住了,而父进程正在等待加入它。
欢迎提供额外的解释,我可以编辑这个答案。