En python3, j'ai essentiellement le code suivant:Comment éviter les processus zombies en python?
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()
Quand je démarre le serveur et le client, chaque fois le client termine un processus de zombie reste. Comment changer le code afin qu'il ne reste aucun processus zombie?
[question similaire] (http://stackoverflow.com/questions/2760652/how-to-kill- ou-avoid-zombie-processes-with-subprocess-module), celui-ci utilisant le module ['subprocess'] (https://docs.python.org/3/library/subprocess.html) au lieu d'essayer de gérer l'enfant discussions directement. –
S'agit-il en effet de [zombies] (https://en.wikipedia.org/wiki/Zombie_process), c'est-à-dire des processus à l'état terminé? Peut-être qu'ils sont en vie, juste perdu le processus parent? – 9000
Ceci est un [doublon de cette question] (https://stackoverflow.com/questions/18090230/forking-python-defunct-child) – user2722968