Es gibt keinen einfachen Weg. Erstens hat dies nichts mit Vernetzung zu tun : CLOSE_WAIT ist der Status, in den Ihr untergeordneter Prozess eingeht, nachdem Sie mit einem ACK auf ein FIN- Paket geantwortet haben, und bevor der Socket geschlossen und ein FIN- Paket an seinen Peer gesendet wird. Während des CLOSE_WAIT- Status führt der Prozess eine Operation aus, an deren Ende er close () aufruft, wodurch der Kernel das FIN-Paket aussendet.
Mit anderen Worten, während des CLOSE_WAIT- Status versucht der Prozess, eine Operation abzuschließen und nicht auf etwas von einem Peer zu warten. Das Herunterfahren des Netzwerks, das erneute Starten von Schnittstellen usw. führt zu nichts.
Im großen und ganzen sollte dies an sich kein großes Problem sein: Es ist nichts falsch daran, wenn einige Prozesse in einem CLOSE_WAIT- Zustand hängen . Was Sie daran stört, ist schwer zu verstehen: Sie geben an, dass der übergeordnete Prozess Port 11000 abhört, und dann das untergeordnete Element an Port 37528 anrufen. Sie geben jedoch an, dass nach dem Tod des übergeordneten Prozesses keine neue Instanz des Servers gestartet werden kann der Port 11000 ist nicht freigegeben. Sie haben jedoch gerade erklärt, dass es nicht der Kindprozess ist, der ihn verwendet! Also wer ist
Jedenfalls gibt es nur ein paar Dinge, die Sie ausprobieren können.
Haben Sie versucht, einen Prozess mit der Option -9 zu beenden? Es ist das Stärkste, das du brauen kannst.
Sie können strace von Anfang an verwenden, um Systemaufrufe auch in den untergeordneten Prozessen (oder untergeordneten Prozessen?) Mithilfe von zu verfolgen
strace -f YourParentProcess
Dies wird auch den * fork () * ed-Prozessen folgen.
Meine Vermutung ist, dass Sie möglicherweise das Kind vergessen und herausfinden wollen, warum und von wem Port 11000 belegt ist. Sie sollten den Handier-Befehl versuchen
ss -lntp | grep 11000
die Angelegenheit untersuchen.