退出并清理python fork

时间:2016-02-18 10:45:34

标签: python linux fork htop

我正在尝试使用python中的fork编写套接字服务器。不知何故,当客户端连接时,将创建一个新的fork,这个fork进程将处理包括发送/接收在内的连接 我在Linux centOS上运行此脚本,并使用htop/top监视资源,以查看显示了多少分叉(任务)。该 问题是当我通过使用os._exit(0)杀死一些fork时htop不会被改变(自然它必须通过查杀叉子来减少)当我关闭python脚本时,每个东西都会恢复正常(Ram使用和任务) 。
所以当我使用os._exit(0)杀死一些分叉时,我必须这样做,它会在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)

1 个答案:

答案 0 :(得分:2)

父进程需要等待子进程才能进行子进程。要发布的资源。在那之前,这个过程仍然存在于僵尸"状态,它仍会显示在pstop

您可以拨打os.wait()os.waitpid()os.wait3()os.wait4()之一。

带有os.wait3()选项的

os.WNOHANG对您来说可能是最有用的,因为它会等待任何子进程,并且在子进程终止之前父进程不会阻塞(或者它的状态发生变化 - wait将返回已停止或重新启动的子进程。

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