终止特定进程的批处理文件

终止特定进程的批处理文件

我正在使用以下脚本来终止监听特定 IP 和特定端口的处于 CLOSE_WAIT 状态的进程。

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 状态时才终止该进程。假设只有 3 个连接处于 CLOSE_WAIT 状态,则不应终止该进程。

答案1

这是我的尝试。

我使用了这篇文章中的一些技巧:https://stackoverflow.com/questions/2913231/how-do-i-increment-a-dos-variable-in-a-for-f-loop

echo off

set /a c=1
setlocal ENABLEDELAYEDEXPANSION

FOR /F "tokens=5 delims= " %%I IN (
    'netstat -ano ^| find "127.0.0.1:5900" ^| find "CLOSE_WAIT"'
) DO (
    set /a c=c+1
    set /a last=%%I
)
if %c% geq 10 (
   taskkill /PID !last!
)

endlocal

基本上,在循环期间我只是增​​加一个变量。最后,如果计数大于 10,我就会终止该任务。

netstat限制:这仅计算由和返回的行finds,并使用最后一个 PID 计数对于 taskkill。它假设所有行都来自同一个 PID,但这仅在某些情况下才成立(例如您的情况,您搜索地址和港口)。

相关内容