Я использую следующий сценарий для уничтожения процесса в состоянии 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. Если скажем, существует только 3 соединения в CLOSE_WAIT затем, процесс не должен быть уничтожен.
Вот моя попытка.
Я использовал несколько приемов из этого сообщения: 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
и находками
, и используются последний PID подсчитал для задачи убийства. Предполагается, что все строки принадлежат одному PID, но это верно только в некоторых случаях (например, в вашем случае, когда вы ищете адрес и порт ).