Już martwy proces nadal pochłania ruch sieciowy


1

Używam Windows 7, Ruby 1.9.2, SciTE, Outpost Pro 2009 i NetBalancer.

Pisanie programów Ruby w SciTE Naciskam, Ctrl+Breakaby je zabić. Ten sposób ma być łatwy, szybki i niezawodny. Ale teraz napisałem program, którego nigdy wcześniej nie napisałem i znalazłem problem.

Program przegląda witrynę w 10 wątkach ( Thread.new) za pomocą open-uri. Każdy wątek pobiera jeden mały plik. Niektóre adresy URL mają Timeout::Error.
Kiedy nacisnę Ctrl+Break, proces ruby.exeumiera (widzę to również w Menedżerze zadań) i SciTE jest gotowy do następnego F5. Placówka również nie pokazuje mi żadnej aktywności w sieci.
ALE! Ikona NetBalancera w zasobniku pokazuje, że moja sieć jest maksymalnie obciążona - 512 kb / s. Kiedy otwieram NetBalancer, widzę zieloną linię, pokazującą obciążenie sieci, ale na liście nie ma procesu pochłaniającego ruch, więc nie wiem, co powinienem zabić, aby go zatrzymać.
A kiedy to robię netstat -o, widzę to:

  TCP    192.168.1.2:53629      server2:http           FIN_WAIT_1      916
  TCP    192.168.1.2:53630      server2:http           FIN_WAIT_2      916
  TCP    192.168.1.2:53631      server2:http           FIN_WAIT_2      916
  TCP    192.168.1.2:53632      server2:http           FIN_WAIT_2      916
  TCP    192.168.1.2:53648      server2:http           FIN_WAIT_2      916
  TCP    192.168.1.2:53664      server2:http           FIN_WAIT_2      916
  TCP    192.168.1.2:53667      server2:http           FIN_WAIT_2      916
  TCP    192.168.1.2:53676      server2:http           FIN_WAIT_2      916

Wygląda na to, że muszę tylko użyć taskkill, ale:

C:\Windows\system32>taskkill /PID 916
Ошибка: Не удается найти процесс "916".

(Tłumaczenie: Nie można znaleźć procesu „916”)

Niewidzialny proces nadal zjada cały mój kanał sieciowy przez kilka minut, a następnie zatrzymuje się. Połączenia netstatrównież znikają. Ale nawet nie rozumiem, jak, dlaczego i kiedy to się kończy, ponieważ pełne zadanie pobierania powinno trwać około godziny. Czy to umiera spontanicznie?
W każdym razie chcę mieć sposób na zabicie tego niewidzialnego zjadacza sieci .

Odpowiedzi:


2

Po zakończeniu procesu system Windows prosi serwer o zamknięcie połączenia TCP, wysyłając pakiet FIN. Ponieważ jednak twoje połączenie jest używane w 100%, pakiet FIN potrzebuje trochę czasu, aby dotrzeć do serwera. W tym czasie serwer nie wie o śmierci procesu i wysyła do Ciebie jeszcze więcej danych. FIN-WAITStan oznacza komputer wysłał FIN pakiet i czeka na uznającego FIN + ACK.

Proces jest już martwy; widzisz jego PID, ponieważ PID jest przechowywany wraz z innymi parametrami połączenia TCP, a połączenie nie zostało jeszcze zamknięte.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.