Taskkill.exe: jangan melempar kesalahan jika proses tidak berjalan

33

Saya menjalankan acara pembuatan postingan Visual Studio yang mematikan IIS jika masih berjalan setelah kompilasi:

taskkill /f /im w3wp.exe

Berikut ini berfungsi dengan baik jika IIS masih berjalan, tetapi membuat kesalahan jika sudah berhenti:

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

Apakah ada cara untuk memberitahu taskkill untuk mengabaikan masalah jika tidak dapat menemukan proses yang cocok berjalan?

Luk
sumber

Jawaban:

29

Alih-alih menjalankan satu perintah, apakah menjalankan file batch kecil sebagai gantinya?

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

Solusi yang saya temukan untuk ini adalah menjalankan

START /wait taskkill /f /im w3wp.exe

Ini mengembalikan sukses dari perintah MULAI, dan setiap kesalahan yang dilemparkan oleh TASKKILL dilemparkan di jendela konsol baru

Dustin Gamester
sumber
5
dan jika Anda ingin menunggu tugas untuk dibunuh sebelum melanjutkan dengan file batch. cukup tambahkan:START /wait taskkill /f /im w3wp.exe
jezternz
1
Menunggu adalah detail yang sangat penting. Saya akan mengeditnya menjadi jawaban asli untuk menghindari kebingungan. Terima kasih @jezternz!
Dustin Gamester
15

Ini juga berfungsi dengan baik:

taskkill /IM "w3wp.exe" /F /FI "STATUS eq RUNNING"
Richard Casavecchia
sumber
Saya tidak bisa menjalankan ini - versi taskkill saya sepertinya tidak mengenali "STATUS dan eq RUNNING". Namun, "MEMUSAGE gt 2" tidak berfungsi.
Polyfun
Saya menemukan bahwa "STATUS eq UNKNOWN" adalah opsi yang lebih baik untuk menangkap proses yang mungkin atau mungkin tidak macet (tapi bagaimanapun, Anda tidak menginginkannya)
Andy Krouwel
10

Atau, ini hanya akan mengembalikan pesan info jika tidak ditemukan:

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

Info dari: di sini

acarlon
sumber
3

Ini adalah solusi satu baris .

Ini akan menjalankan taskkill hanya jika prosesnya benar-benar berjalan jika tidak maka itu hanya info bahwa itu tidak berjalan.

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

Ini adalah output jika proses sedang berjalan:

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

Ini adalah output jika tidak berjalan:

process "w3wp.exe" not running.
nicovota
sumber
0

Memaksa proses untuk membunuh (jika proses sedang berjalan), dan jangan menampilkan informasi apa pun.

Perintah berikut ini berfungsi dengan baik.

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

PandllCom
sumber
Bagaimana ini akan membunuh w3wp.exe?
Jason Aller