Пакетный файл, который уничтожает определенный процесс

Я использую следующий сценарий для уничтожения процесса в состоянии 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 затем, процесс не должен быть уничтожен.

1
задан 2 February 2015 в 00:30
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 и находками , и используются последний PID подсчитал для задачи убийства. Предполагается, что все строки принадлежат одному PID, но это верно только в некоторых случаях (например, в вашем случае, когда вы ищете адрес и порт ).

0
ответ дан 4 December 2019 в 08:07

Теги

Похожие вопросы