Taskkill.exe: non generare un errore se il processo non è in esecuzione


33

Sto eseguendo un evento post build di Visual Studio che arresta IIS se è ancora in esecuzione dopo la compilazione:

taskkill /f /im w3wp.exe

Di seguito funziona perfettamente se IIS è ancora in esecuzione, ma genera un errore se si è già arrestato:

Error 1 The process "w3wp.exe" not found. xxx\EXEC

C'è un modo per dire a taskkill di ignorare il problema se non riesce a trovare un processo in esecuzione corrispondente?

Risposte:


29

Invece di eseguire un comando, funzionerebbe invece un piccolo file batch?

tasklist /FI "IMAGENAME eq w3wp.exe" 2>NUL | find /I /N "w3wp.exe">NUL
if "%ERRORLEVEL%"=="0" taskkill /f /im w3wp.exe

22

La soluzione che ho trovato è stata quella di eseguire

START /wait taskkill /f /im w3wp.exe

Restituisce un successo dal comando START e qualsiasi errore generato da TASKKILL viene generato nella nuova finestra della console


5
e se si desidera attendere che vengano terminate le attività prima di continuare con il file batch. aggiungi semplicemente:START /wait taskkill /f /im w3wp.exe
jezternz il

1
L'attesa è un dettaglio molto importante. Lo modificherò nella risposta originale per evitare confusione. Grazie @jezternz!
Dustin Gamester,

15

Anche questo funziona bene:

taskkill /IM "w3wp.exe" /F /FI "STATUS eq RUNNING"

Non sono riuscito a farlo funzionare - la mia versione di taskkill non sembra riconoscere "STATUS eq RUNNING". Tuttavia, "MEMUSAGE gt 2" funziona.
Polyfun,

Ho scoperto che "STATUS eq UNKNOWN" era un'opzione migliore per catturare i processi che possono essere bloccati o meno (ma in entrambi i casi, non li vuoi)
Andy Krouwel,

10

Oppure, questo restituirà semplicemente un messaggio informativo se non trovato:

taskkill /f /im w3wp.exe /fi "memusage gt 2"

Informazioni da: qui


3

Questa è una soluzione a una riga .

Eseguirà taskkill solo se il processo è realmente in esecuzione, altrimenti fornirà solo informazioni che non è in esecuzione.

tasklist | find /i "w3wp.exe" && taskkill /im w3wp.exe /F || echo process "w3wp.exe" not running.

Questo è l'output nel caso in cui il processo fosse in esecuzione:

w3wp.exe           1960 Services                   0    112,260 K
SUCCESS: The process "w3wp.exe" with PID 1960 has been terminated.

Questo è l'output nel caso in cui non sia in esecuzione:

process "w3wp.exe" not running.

0

Forza il processo a terminare (se il processo è in esecuzione) e non genera alcuna informazione.

Il seguente comando funziona bene.

taskkill /f /im w3wp.exe /t /fi "status eq running">nul


Come ucciderà questo w3wp.exe?
Jason Aller,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.