我們在這裡不是討論重新啟動/重新啟動(類似於另一個問題)。這個問題區分了Windows處理taskkill上的現有檔案鎖的不同方式和它回應關閉/重新啟動的方式。
如果我強行殺死一個程序,它鎖定的檔案是否仍然保持鎖定狀態,或者當進程終止時鎖也會被釋放嗎?
我所說的強制終止是指在任務管理器中使用“taskkill”命令或“結束進程樹”。
為了進一步澄清,我並不是說留下常駐未刪除輔助鎖定檔案的進程,例如 MS Word。我說的是實際的獨佔或共享檔案鎖的狀態。
taskkill 會釋放檔案鎖定嗎?或者,鎖定會保持不變,直到重新啟動或在電腦管理控制台中執行管理員使用者操作為止?
這是我可以確認的 - 殺死一個放置獨佔鎖的 16 位元進程
這是使用一個小型控制台程序,該程式對同一本機目錄中的檔案設定獨佔鎖。該程式將保持運行狀態,直到用戶按下某個鍵,然後它將解鎖該檔案。發生的情況如下:
如果在命令提示字元下啟動並在任務管理器中終止,它會釋放鎖定。要殺死的進程是啟動該程式的特定 cmd.exe。殺死它確實會釋放鎖。
如果透過按一下啟動然後透過關閉視窗終止,則鎖定被釋放。
但是,如果透過在工作管理員中按一下然後殺死 conhost.exe 來啟動,則不會釋放鎖定。在這種情況下,也沒有 cmd.exe,因為它被點擊了。因此,殺死它的唯一方法是殺死它正在執行的 conhost.exe 或 ntvdm.exe。
如果透過在工作管理員中按一下然後終止 ntvdm.exe 來啟動,它會釋放鎖定。
排它鎖在任何時候都不會真正阻止檔案被刪除。但是,當鎖定到位時,Windows 不允許在資源管理器中複製檔案。
因此,兩種不同的行為取決於任務是透過 cmd 提示字元啟動還是透過點擊並終止 conhost 或 ntvdm 子系統啟動。當然,終止 ntvdm.exe 子系統也會終止 ntvdm 執行緒中正在執行任務的任何其他程序。