退出并清理 python fork

exit and clean up python fork

我正尝试在 python 中使用 fork 对套接字服务器进行编码。当客户端连接时,将以某种方式创建一个新的 fork,并且这个 fork 进程将处理连接,包括 send/receive.
我 运行 此脚本在 Linux centOS 上,并使用 htop/top 监控资源以查看显示了多少分叉(任务)。这 问题是当我使用 os._exit(0) htop 杀死一些叉子时 htop 不会改变(自然它必须通过杀死叉子来减少)并且当我关闭 python 脚本时一切都会恢复正常( Ram用法和任务)。
所以当我使用 os._exit(0) 杀死一些 fork 时我必须做的是,它会影响 htop 另一方面释放所有资源并且不要等到它自己的父级被杀死?

这是创建分叉的代码:

def test(sock):
     //handle socket then return
for i in range (1000):
     sock,addr=socket.accept()
     pid=os.fork()
     if pid==0:
          test(sock)
          os._exit(0)
     elif pid !=-1:
          os.waitpid(-1, os.WNOHANG)

父进程需要等待子进程才能释放子进程的资源。到那时进程仍然存在"zombie"状态,并且还会出现pstop

您可以调用 os.wait(), os.waitpid(), os.wait3(), or os.wait4() 之一。

os.wait3()os.WNOHANG 选项可能对您最有用,因为它将等待任何子进程并且父进程不会阻塞,直到子进程终止(或者它的状态改变 - wait 将 return 已停止或重新启动的子进程。

有关底层系统调用的更多详细信息,请参阅 Linux 手册页:man 2 wait