Mate um processo por PID iniciado por Batch Script (evitando outro processo de mesmo nome)

2

Tenho vários processos com o mesmo nome (digamos, o processo múltiplo FIREFOX.exe). Um script em lote abre outro processo do firefox.exe e, após algum tempo predefinido, precisa eliminar o processo aberto.

Eu tive a seguinte solução para isso

start "" "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -P "ABC" -no-remote
PING 127.0.0.1 -n 10 -w 1000 >NUL
for /F "TOKENS=1,2,*" %%a in ('tasklist /FI "IMAGENAME eq firefox.exe"') do set MyPID=%%b
taskkill /PID %MyPID% /T 

Isso funciona bem EXCETO se outro processo com o mesmo nome (firefox.exe) for aberto após o primeiro comando (ou seja, executar o firefox), o comando taskkill realmente mata o processo mais recente em vez do começou

Então, como posso ter certeza de que o script só mata o processo iniciado e nenhum outro.

    
por SuperUserMan 05.10.2014 / 10:07

1 resposta

1

De qualquer forma, resolvi o problema sozinho.

Na verdade, a solução acima precisa de um pequeno ajuste. Isso é tudo

start "" "C:\Program Files (x86)\Mozilla Firefox\firefox.exe" -P "ABC" -no-remote
for /F "TOKENS=1,2,*" %%a in ('tasklist /FI "IMAGENAME eq firefox.exe"') do set MyPID=%%b    
PING 127.0.0.1 -n 10 -w 1000 >NUL
taskkill /PID %MyPID% /T 

O que estava acontecendo anteriormente era eu estava definindo o% MyPID% após o comando PING (que é apenas um atraso de tempo). Então, nesse período, qualquer novo processo (com o mesmo nome) que foi aberto, registrou seu PID para tarefa. Eu simplesmente movi o comando imediatamente após o comando de abertura do processo e agora ele funciona.

Tecnicamente, porém, se houver muitos processos iguais a abrir (digamos em milissegundos), por vários scripts, isso ainda pode causar problemas e tarefas podem matar processos errados (pode ser que alguém escreva um responder sobre isso. eu não vou aceitar a minha resposta a partir de agora ... mas vai esperar por um dia ou 2, para isso):)

    
por 05.10.2014 / 10:34