退出并清理 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"状态,并且还会出现ps
和top
等
您可以调用 os.wait()
, os.waitpid()
, os.wait3()
, or os.wait4()
之一。
os.wait3()
和 os.WNOHANG
选项可能对您最有用,因为它将等待任何子进程并且父进程不会阻塞,直到子进程终止(或者它的状态改变 - wait
将 return 已停止或重新启动的子进程。
有关底层系统调用的更多详细信息,请参阅 Linux 手册页:man 2 wait
。
我正尝试在 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"状态,并且还会出现ps
和top
等
您可以调用 os.wait()
, os.waitpid()
, os.wait3()
, or os.wait4()
之一。
os.wait3()
和 os.WNOHANG
选项可能对您最有用,因为它将等待任何子进程并且父进程不会阻塞,直到子进程终止(或者它的状态改变 - wait
将 return 已停止或重新启动的子进程。
有关底层系统调用的更多详细信息,请参阅 Linux 手册页:man 2 wait
。