【发布时间】:2017-08-23 11:05:42
【问题描述】:
在 Python3 中,我基本上有以下代码:
server.py:
import os
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(("127.0.0.1", 10000))
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.listen(5)
while True:
print("waiting")
connection, client_address = sock.accept()
print("received")
child_pid = os.fork()
if child_pid == 0:
print("connection received")
received = connection.recv(1024)
connection.sendall("OK".encode('utf-8'))
os._exit(0)
client.py:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(("127.0.0.1", 10000))
sock.close()
当我启动服务器然后启动客户端时,每次客户端完成时都会保留一个僵尸进程。
如何修改代码,让僵尸进程不存在?
【问题讨论】:
-
Similar question,这个使用
subprocess模块,而不是尝试直接管理子线程。 -
这些确实是zombies,即处于终止状态的进程吗?也许他们还活着,只是失去了父进程?
标签: python sockets zombie-process