CLOSE_WAIT significa que o outro lado fechou a conexão. O socket será fechado depois que o programa local fechar o descritor de socket. Não há tempo limite para CLOSE_WAIT, portanto, o processo pode ser bloqueado com um soquete neste estado indefinidamente. Quando você mata o processo e seus filhos, eles fecham os soquetes e eles são fechados. Execute lsof
e veja se as crianças têm os soquetes abertos. Se o fizerem, então parece um erro no código deles.
Quanto a FIN_WAIT2, é quando o lado local aguarda FIN, ACK do outro lado para confirmar o fechamento da conexão. No entanto, há um tempo limite para todo o sistema nesse estado (consulte /proc/sys/net/ipv4/tcp_fin_timeout
), que é, por padrão, 60s, portanto, nada deve ficar preso nessa fase por mais de um minuto. MAS, se parece que é possível codificar um programa de tal forma que uma conexão semi-fechada pareça ativa para o kernel, então o tempo limite não será ativado. Novamente, parece que você encontrou um inseto.