2013-07-12 12 views
6

Come posso verificare se un processo è in esecuzione da un file batch/cmd? E se il processo è in esecuzione, come posso interrompere il processo automaticamente?Come interrompere un processo automaticamente tramite uno script batch

Come uno script di cmd, qualcuno può darmi qualche suggerimento o aiutarmi a fare quel tipo di sceneggiatura.

Esempio (pseudo codice):

If calc.exe is running       
Stop calc.exe 

voglio qualcosa di simile:

@echo off 

:x 
PATH=C:\Windows\System32\calc.exe 
If calc.exe is ON goto Process_Stop 

:Process_Stop 
net stop calc.exe 
goto x 

risposta

13

Prima di tutto, si ha il comando errato per interrompere un processo come calc.exe. NET STOP interromperà un servizio, ma non un normale processo del programma. Invece vuoi TASKKILL.

Secondo: se sai che vuoi uccidere il processo se esiste, allora perché pensi di dover controllare se è in esecuzione prima di ucciderlo? Puoi semplicemente tentare di uccidere il processo indipendentemente. Se non esiste, viene generato un errore e non viene fatto alcun danno. Se esiste, viene ucciso con un messaggio di successo.

taskkill /im calc.exe 

Se non si desidera visualizzare il messaggio di errore, quindi reindirizzare stderr per nul utilizzando 2>nul. Se non si desidera visualizzare il messaggio di successo, quindi reindirizzare lo stdout su null utilizzando >nul.

taskkill /im calc.exe >nul 2>nul 

Se si vuole agire a seconda del risultato, quindi è possibile utilizzare il condizionale && e || operatori per il successo e il fallimento.

taskkill /im calc.exe >nul 2>nul && (
    echo calc.exe was killed 
) || (
    echo no process was killed 
) 

Oppure è possibile utilizzare il valore ERRORLEVEL per determinare cosa fare in base al risultato.

0

Partenza comando tasklist - Questo comando fornisce un elenco delle attività e dei servizi che sono in esecuzione. Verifica se l'attività che ti interessa è in esecuzione utilizzando l'espressione regolare

Quindi utilizzare il comando taskkill per terminare il servizio o l'attività.

+0

Questo è più di un commento, piuttosto che una risposta. – Neolisk

3

Un comando più leggibile e più semplice è qualcosa di simile:

taskkill/F/FI "nomeimmagine eq calc.exe"

Questa metodologia non restituisce un codice di errore se il processo non è in esecuzione dove l'opzione/IM WILL restituisce un errore se il processo non è in esecuzione. È inoltre possibile utilizzare i caratteri jolly come:

taskkill/F/FI "imagename eq calc * .exe" uccidere qualsiasi processo che inizia con 'calc' e finisce con '.exe' nel nome.

+1

L'ho usato con successo come evento pre-build per i progetti nella soluzione in Visual Studio per molti anni, fyi. – outbred