Ein Kollege von mir ist kürzlich auf ein Problem gestoßen, bei dem ein angeblich abgestorbener Prozess immer noch an einen Netzwerkport gebunden war, sodass andere Prozesse nicht an diesen Port gebunden werden konnten. Konkret netstat -a -b
wurde berichtet, dass ein System
mit PID 4476 benannter Prozess den Port 60001 offen hatte, außer dass kein Prozess mit PID 4476 existierte, zumindest soweit ich das beurteilen konnte.
Der Prozess-Explorer und der Task-Manager listeten PID 4476 nicht auf (obwohl es einen anderen Prozess mit dem Namen System
PID 4 gab, der über einen eigenen Satz von TCP-Verbindungen ohne 60001 verfügte). taskkill /PID 4476
berichtete auch, dass PID 4476 nicht gefunden werden konnte.
Gibt es eine Möglichkeit, diesen mysteriösen Systemprozess zu beenden, um den Port freizugeben, an den er derzeit gebunden ist? Was kann dazu führen, dass dies passiert? Wie kann es Prozesse geben, von denen keiner von Task Manager, Process Explorer oder Taskkill etwas weiß? Durch einen Neustart konnte das Problem behoben werden, ich möchte jedoch wissen, ob dies ohne Neustart behoben werden kann.
Antworten:
Ich weiß, dass dies ein alter Thread ist, aber falls jemand das gleiche Problem hat, hatte ich ...
Möglicherweise war auf Ihrem Prozess ein TCP-Port offen, als er abstürzte oder auf andere Weise beendet wurde, ohne ihn explizit zu schließen. Normalerweise räumt das Betriebssystem diese Art von Dingen auf, aber nur, wenn der Prozessdatensatz verschwindet. Während der Prozess anscheinend nicht mehr ausgeführt wird, gibt es mindestens eine Möglichkeit, dies aufzuzeichnen, um die erneute Verwendung der PID zu verhindern. Dies ist die Existenz eines untergeordneten Prozesses, der nicht vom übergeordneten Prozess getrennt ist.
Wenn Ihr Programm während der Ausführung Prozesse erzeugt hat, versuchen Sie, diese zu beenden. Dadurch sollte der Prozessdatensatz freigegeben und der TCP-Port bereinigt werden. Anscheinend macht Windows dies, wenn der Datensatz freigegeben wird, nicht, wenn der Prozess beendet wird, wie ich es erwartet hätte.
quelle
Haben Sie versucht, TCPView zu verwenden und die Verbindung zu beenden? Ich weiß nicht, ob es den Zusammenhang in dem Szenario zeigt, das Sie beschreiben, weil mir das noch nie passiert ist. Aber es ist das Einzige, woran ich denken kann, wenn dies noch einmal passiert.
Was war der Prozess - war es kommerzielle Software oder etwas Eigenes? Es scheint, dass Port 60001 von einigen Trojanern verwendet wird - ich frage mich, ob es ein Rootkit oder etwas gewesen sein könnte, das sich vor dem Betriebssystem verstecken könnte. Vielleicht möchten Sie dieser Maschine einen guten Einstieg in AV geben, vielleicht etwas von einem bootfähigen Medium.
quelle
Öffnen Sie die Eingabeaufforderung als Administrator
*** Wiederholen Sie Schritt 2, bis kein untergeordneter Prozess mehr vorhanden ist
C: \ WINDOWS \ system32> wmic-Prozess, bei dem (ParentProcessId = 1091) Caption, ProcessId abgerufen wird
Caption ProcessId
cmd.exe 1328
2.a. C: \ WINDOWS \ system32> wmic-Prozess, bei dem (ParentProcessId = 1328) Caption, ProcessId abgerufen wird
2.b. Wiederholen Sie diesen Vorgang, bis keine weiteren untergeordneten Prozesse gefunden wurden
- Dann alle untergeordneten Prozesse beenden
quelle
Ich hatte vorhin das gleiche Problem. Der Befehl netstat -a -n Windows gab mir die Liste der offenen Ports mit der Prozess-ID. Daraufhin habe ich die Portnummer ermittelt, über die ich die Verbindung trennen wollte, und diese Verbindung dann mithilfe der TCPView-Software geschlossen. Das hat bei mir funktioniert.
quelle
Wenn Sie Windows-Benutzer sind, führen Sie die folgenden Schritte aus: Schritt 1: Gehen Sie zu diesem Pfad: Systemsteuerung \ Alle Systemsteuerungselemente \ Verwaltung
Schritt 2: Klicken Sie auf Dienste
Schritt 3: Stoppen Sie unerwünschte Dienste, die auf dem gewünschten Port ausgeführt werden.
quelle
ps -ef | grep processname
töte die verwandten Prozesse
töte -9 pid pid
Hat in meinem Fall funktioniert
quelle