使用ntsd程式 (如果安裝過VS,在VS的安裝目錄下,比如“C:\Program Files (x86)\Debugging Tools for Windows (x86)\ntsd.exe”,也可以在這裡下載) 兩種方法 一種是使用進程的ID號,將PID換成對應進程ID號即可 一種是使用進程的名 ...
使用ntsd程式 (如果安裝過VS,在VS的安裝目錄下,比如“C:\Program Files (x86)\Debugging Tools for Windows (x86)\ntsd.exe”,也可以在這裡下載)
ntsd -c q -p PID
ntsd -c q -pn PName
兩種方法
一種是使用進程的ID號,將PID換成對應進程ID號即可
一種是使用進程的名稱,將PName換成對應的exe名字即可,比如notepad.exe
為了方便,寫了個批處理,將該批處理和ntsd放在一起,使用時執行批處理,選擇對應的方式,並輸入參數即可。
@ECHO OFF TITLE 結束使用普通方法無法結束的進程 COLOR 0A MODE con: COLS=62 LINES=22 :MENU set tm1=%time:~0,2% set tm2=%time:~3,2% set tm3=%time:~6,2% ECHO. %date% %tm1%點%tm2%分%tm3%秒 ECHO. ======================================== ECHO. 請選擇要進行的操作,然後按回車 ECHO. ──────────────────── ECHO. 1 根據進程號PID結束進程 ECHO. 2 根據進程名稱結束進程 ECHO. 0 退出 ECHO. ECHO.請輸入選擇項目的序號: set /p choose= if "%choose%" equ "" goto MENU if %choose%==1 goto killusingpid if %choose%==2 goto killusingname if %choose%==0 goto END ECHO. 輸入錯誤,請輸入正確的項目序號: goto MENU :killusingpid set choose= ECHO.請輸入進程號PID,然後按回車 set /p proid= set /a i=0 :kpid ntsd -c q -p %proid% if %i% GEQ 10 ( ( echo 結束進程%proid%失敗 ) & goto MENU ) set /a i=%i%+1 echo 結束進程%proid%第%i%次 tasklist | findstr /i %proid% && ( goto kpid ) echo 結束進程ID為%proid%的程式成功或進程ID:%proid%不存在 GOTO MENU :killusingname set choose= ECHO.請輸入進程的名稱(比如notepad.exe),然後按回車 set /p proname= set /a i=0 :kpname ntsd -c q -pn %proname% if %i% GEQ 10 ( ( echo 結束程式%proname%失敗 ) & goto Menu ) set /a i=%i%+1 echo 結束程式%proname%第%i%次 tasklist | findstr /i %proname% && goto kpname echo 結束程式%proname%成功或程式:%proname%未啟動 GOTO MENU :END exit
參考:
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/cdb-command-line-options