Verifique se um processo está sendo executado ou não, e inicie vários programas se não estiver e finalize-se

2

Eu encontrei este em stackoverflow e seu código é isso: -

@echo off
Set "MyProcess=calc.exe"
echo "%MyProcess%"
tasklist /NH /FI "imagename eq %MyProcess%" 2>nul |find /i "%MyProcess%">nul
If not errorlevel 1 (Echo "%MyProcess%" est en cours d^'execution) else (start "" "%MyProcess%")
pause 

Mas meu problema é diferente. De acordo com o cabeçalho, quero verificar continuamente se um programa está sendo executado. Então criei MY arquivo em lote como este.

@echo off
:B
Set "MyProcess=cmd.exe"
echo "%MyProcess%"
tasklist /NH /FI "imagename eq %MyProcess%" 2>nul |find /i "%MyProcess%" >nul
If not errorlevel 1 (Echo "%MyProcess%" est en cours d^'execution) else (start "" "1.bat","" "2.bat", "" "3.bat")
goto B    

O que parece não estar funcionando também.

E a coisa mais difícil de todas, eu sou apenas um iniciante em lote, então eu não entendo a maioria das coisas aqui

Obrigado.

    
por Bhanu Kumar 04.01.2016 / 10:37

1 resposta

2

Check if a process is running or not continually, and start multiple programs if not and terminate itself

I want to check continually if a program is running

O abaixo deve funcionar para a necessidade de chamar os scripts em lote, um por um, e basicamente procura confirmar na memória na máquina que o comando TASKLIST é executado para confirmar sua execução.

Se não estiver em execução, chame os scripts em lote um após o outro; caso contrário, vá para a rotina :B e inicie a verificação novamente. Se estiver em execução, ECHO the "%MyProcess%" est en cours d^'execution e, em seguida, vá para a rotina :B e verifique novamente para confirmar (uma verificação contínua).

AVISO: Certifique-se de ter GOTO EOF no final dos scripts de lote que são chamados e NÃO EXIT , senão eles não passarão o controle de volta para o responsável pela chamada. O lote original pode continuar sua verificação de loop. (veja abaixo o exemplo EXEMPLO DE SCRIPT CHAMADO ).

SCRIPT QUE TEM LÓGICA DE VERIFICAÇÃO (use este)

@ECHO OFF
:B
SET MyProcess=cmd.exe
ECHO "%MyProcess%"
TASKLIST | FINDSTR /I "%MyProcess%"
IF ERRORLEVEL 1 (GOTO :StartScripts) ELSE (ECHO "%MyProcess%" est en cours d^'execution)
GOTO :B 

:StartScripts 
::: //-- Put in the full path to the batch scripts to call
::: //-- Be sure the security context this process runs as has access to execute the below called batch scripts
CALL "C:\Path.bat"
CALL "C:\Path.bat"
CALL "C:\Path.bat"
GOTO :B 

(Eu suponho que os scripts em lote chamados terão lógica para iniciar qualquer processo que foi determinado para NÃO ser encontrado em execução na memória na máquina que o script abobe é executado, portanto, certifique-se de que GOTO EOF seja a última coisa que TODOS Eu preciso ver a lógica nestes para saber por mim mesmo se isso vai funcionar bem ou não, caso contrário.)

EXEMPLO DE SCRIPT CHAMADO (por exemplo, 1.bat, 2.bat, 3.bat)

<LOGIC>
<LOGIC>
<LOGIC>
<LOGIC>
<LOGIC>
<LOGIC>
<LOGIC>
<END OF LOGIC>

::: Keep GOTO EOF here to pass control back to the caller
GOTO EOF

OUTRAS NOTAS

  • Você poderia colocar a lógica no mesmo script em lote que os três scripts de lote chamados separados também são executados e apenas os chamam como rótulos \ rotinas, mas eu preciso ver a lógica naqueles para confirmar funcionaria. Contanto que cada um tenha o GOTO EOF na parte inferior eles, eles funcionariam da mesma maneira, mas desta forma toda a lógica estaria no mesmo arquivo de script em lote.

  • A lógica do script em lote com TASKLIST e FINDSTR como eu tenho para deve funcionar muito bem sem a sintaxe [ /NH /FI imagename eq ] como no exemplo não funciona você mostrou em sua pergunta. Usando o FINDSTR em vez de FIND como no seu exemplo é bom como bem.

  • Eu tenho uma lógica com um lote semelhante ao que verifica local e remotamente os processos em execução nos servidores que corrigem automaticamente o que você está fazendo ou envia um e-mail para indicar que alguém precisa dar alguma atenção, então eu confirmei esse método da lógica de script que forneci com sucesso. Eu simplesmente não tenho toda a sua lógica para otimizar, confirmar, etc.

RECURSOS ADICIONAIS

por 04.01.2016 / 10:51