Arquivo em lote que mata um certo processo

1

Estou usando o seguinte script para eliminar um processo no estado CLOSE_WAIT que ouve um determinado ip e para uma determinada porta.

FOR /F "tokens=5 delims= " %%I IN (
    'netstat -ano ^| find "127.0.0.1:5900" ^| find "CLOSE_WAIT"'
) DO (
    taskkill /PID %%I
)

O script faz o trabalho, mas estou procurando uma pequena modificação.

Eu gostaria que o processo fosse eliminado somente se houvesse mais de 10 conexões no estado CLOSE_WAIT. Se vamos dizer que existem apenas 3 conexões em CLOSE_WAIT, então o processo não deve ser eliminado.

    
por Chris 01.02.2015 / 23:20

1 resposta

0

Aqui está minha tentativa.

Eu usei alguns truques deste post: link

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

Basicamente, durante o ciclo eu apenas incremento de uma variável. No final, se a contagem for maior que 10, mato a tarefa.

Limitação: isso conta apenas as linhas retornadas pelo netstat e finds e usa o último PID contado para o taskkill. Ele assume que todas as linhas são do mesmo PID, mas isso só é verdade em alguns casos (como o seu caso, onde você procura pelo endereço e porta ).

    
por 02.02.2015 / 00:16