Mój kolega ostatnio napotkał problem polegający na tym, że proces, który rzekomo umarł, był nadal związany z portem sieciowym, uniemożliwiając powiązanie innych procesów z tym portem. W szczególności netstat -a -b
raportował, że proces o nazwie System
PID 4476 miał otwarty port 60001, z wyjątkiem tego, że nie istniał żaden proces z PID 4476, przynajmniej o ile mogłem to stwierdzić.
Process Explorer i Task Manager nie wymienili PID 4476 (chociaż istniał inny proces o nazwie System
PID 4, który miał swój własny zestaw połączeń TCP, który nie obejmował 60001). taskkill /PID 4476
poinformował także, że nie można znaleźć PID 4476.
Czy istnieje sposób na zabicie tego tajemniczego procesu systemowego, aby uwolnić port, z którym jest obecnie związany? Co może to spowodować? Jak mogą istnieć procesy, o których żaden Menedżer zadań, Eksplorator procesów i zadania nie wiedzą? Ponowne uruchomienie udało się rozwiązać problem, ale chciałbym wiedzieć, czy istnieje sposób, aby to naprawić bez ponownego uruchamiania.
Odpowiedzi:
Wiem, że to stary wątek, ale na wypadek, gdyby ktoś miał ten sam problem, miałem ...
Może się zdarzyć, że proces miał otwarty port TCP, gdy ulegał awarii lub w inny sposób zakończył działanie bez wyraźnego zamknięcia. Zwykle system operacyjny czyści tego rodzaju rzeczy, ale tylko wtedy, gdy zapis procesu zniknie. Chociaż może się wydawać, że proces już nie działa, istnieje co najmniej jedna rzecz, która może go przechowywać, aby zapobiec ponownemu wykorzystaniu jego PID. Jest to proces potomny, który nie jest odłączony od rodzica.
Jeśli Twój program odrodził jakieś procesy podczas działania, spróbuj je zabić. Powinno to spowodować zwolnienie rekordu procesu i wyczyszczenie portu TCP. Najwyraźniej system Windows robi to po zwolnieniu rekordu, a nie po zakończeniu procesu, jak bym się spodziewał.
źródło
Czy próbowałeś użyć TCPView i zamknąć połączenie? Nie wiem, czy pokaże to połączenie w opisywanym scenariuszu, ponieważ nigdy mi się to nie zdarzyło. Ale to jedyna rzecz, o której mogę pomyśleć, jeśli to się powtórzy.
Jaka była procedura - czy było to oprogramowanie komercyjne, czy coś domowego? Wygląda na to, że port 60001 jest używany przez niektóre trojany - zastanawiam się, czy mógł to być rootkit czy coś, co mogłoby ukryć się przed systemem operacyjnym? Może chciałbym dać tej maszynie dobry raz AV, może coś z nośnika startowego.
źródło
Otwórz wiersz polecenia jako administrator
*** Powtarzaj krok 2, aż nie będzie już procesu potomnego
C: \ WINDOWS \ system32> proces wmic, w którym (ParentProcessId = 1091) pobiera podpis, ProcessId
Caption ProcessId
cmd.exe 1328
2.a. C: \ WINDOWS \ system32> proces wmic, w którym (ParentProcessId = 1328) pobiera podpis, ProcessId
2.b. powtarzaj to, dopóki nie zostaną znalezione dalsze procesy potomne
- Następnie zabij wszystkie procesy potomne
źródło
Wcześniej miałem ten sam problem, polecenie netstat -a -n windows podało mi listę otwartych portów o identyfikatorze procesu. Następnie wybrałem numer portu, który chciałem zamknąć, a następnie zamknąłem to połączenie za pomocą oprogramowania TCPView. To zadziałało dla mnie.
źródło
Jeśli jesteś użytkownikiem systemu Windows, wykonaj poniższe kroki Krok 1: Przejdź do tej ścieżki: Panel sterowania \ Wszystkie elementy panelu sterowania \ Narzędzia administracyjne
Krok 2: Kliknij usługi
Krok 3: Zatrzymaj niechciane usługi działające na pożądanym porcie.
źródło
ps -ef | nazwa procesu grep
zabij powiązane procesy
zabij -9 pid pid
W moim przypadku zadziałało
źródło