我正在使用以下脚本来终止处于CLOSE_WAIT状态的进程,该进程监听某个特定的IP和特定的端口。
FOR /F "tokens=5 delims= " %%I IN ( 'netstat -ano ^| find "127.0.0.1:5900" ^| find "CLOSE_WAIT"' ) DO ( taskkill /PID %%I )
该脚本是它的工作,但我正在寻找一个小的修改。
我希望只有超过10个连接进入CLOSE_WAIT状态才会终止进程。 如果我们说在CLOSE_WAIT中只有3个连接,那么这个过程不应该被终止。
这是我的尝试。
我从这个post使用了一些技巧: https : //stackoverflow.com/questions/2913231/how-do-i-increment-a-dos-variable-in-a-for-f-loop
echo off set /ac=1 setlocal ENABLEDELAYEDEXPANSION FOR /F "tokens=5 delims= " %%I IN ( 'netstat -ano ^| find "127.0.0.1:5900" ^| find "CLOSE_WAIT"' ) DO ( set /ac=c+1 set /a last=%%I ) if %c% geq 10 ( taskkill /PID !last! ) endlocal
基本上,在这个循环中,我只是增加一个variables。 最后,如果数量大于10,我就杀了这个任务。
限制:这只会计算netstat返回的行数,并finds并使用最后一个为taskkill 计数的PID 。 它假定所有的行都来自同一个PID,但是在某些情况下这只是真的(比如你的情况,你在哪里search地址和端口 )。