已经死亡的进程继续消耗网络流量

已经死亡的进程继续消耗网络流量

我正在使用 Windows 7、Ruby 1.9.2、SciTE、Outpost Pro 2009 和 NetBalancer。

在 SciTE 中编写 Ruby 程序时,我按下Ctrl+Break“杀死”按钮。这种方式旨在简单、快速且可靠。但现在我编写了一种我以前从未编写过的程序,并发现了一个问题。

程序使用 10 个线程(Thread.new)来爬取一个网站open-uri。每个线程下载一个小文件。一些网址有Timeout::Error
当我按下 时Ctrl+Break,进程ruby.exe终止(我也可以在任务管理器中看到它),SciTE 已准备好进行下一个F5。Outpost 也没有显示任何网络活动。
但是!托盘中的 NetBalancer 图标显示,我的网络最大负载为 512kbps。当我打开 NetBalancer 时,我看到绿线,显示净负载,但列表中没有占用流量的进程,所以我不知道应该终止什么来阻止它。
当我这样做时netstat -o,我看到了以下内容:

  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

好像我只需要使用taskkill,但是:

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

(翻译:找不到进程“916”)

隐形进程持续占用我所有的网络通道几分钟,然后停止。连接netstat也消失了。但我甚至不明白它是如何、为什么以及何时停止的,因为完整的下载任务应该持续近一个小时。所以它会自动停止?
无论如何,我想有办法杀死这个隐形进程食网者

答案1

当进程退出时,Windows 会通过发送 FIN 数据包请求服务器关闭 TCP 连接。但是,由于您的连接使用率达到 100%,因此 FIN 数据包需要一些时间才能到达服务器。在此期间,服务器不知道进程已死亡,并发送数据已发送给您。此FIN-WAIT状态表示您的计算机已发送 FIN 数据包并正在等待确认 FIN+ACK。

该进程已停止;您看到它的 PID 是因为 PID 与其他 TCP 连接参数一起存储,并且连接尚未关闭。

相关内容