2016-11-03 64 views
-1

a question I asked here相關 - 我有一個啓動的進程處於「暫停」狀態。我無法通過任何常規手段(進程管理器,任務管理器,WinDbg)殺死或恢復此進程。如何在Windows中註銷用戶會話設法殺死「unkillable」進程?

註銷我的會話雖然殺死這個過程。怎麼樣?當我註銷時,操作系統使用什麼機制與Process Explorer嘗試執行的操作有什麼不同?

編輯:澄清 - 我假設Process Explorer在嘗試殺死進程時調用TerminateProcess API函數。過程狀態中的某些東西正在阻止這種工作。顯然,註銷會調用一些不同的行爲,而Windows會忽略阻塞TerminateProcess的任何行爲,並會因爲會話結束而終止進程。

作爲用戶,除了調用TerminateProcess API之外,是否有任何不同的方式來嘗試和終止進程?

+0

這*可能*不是Windows有意做的事情。我的猜測是,無論是什麼導致進程陷入僵局(必須處於內核模式,可能是錯誤的防病毒軟件或錯誤的設備驅動程序),恰好在正確的環境下自行糾正,並導致登錄失敗。 IOW,註銷可能只是一個巧合,解決了問題。 –

+0

另一方面,當刪除窗口站時(例如)內核使用ZwTerminateProcess來終止任何剩餘的進程,並且可能從內核模式發出調用,繞過干擾原始進程的任何事情,似乎是合理的。雖然沒有簡單的方法來測試這個理論。無論如何,你可能會更好地解決原始問題,而不是試圖解決它 - 這是*不正常的行爲。 –

回答

0

Process Explorer無法終止進程本身;它只能要求操作系統這樣做。操作系統本身不需要按照自己的規則進行操作。

請記住,它是定義過程的操作系統本身。它可能很好地定義一個過程作爲登錄會話的一部分。這意味着如果清理整個會話,則不需要清理單個進程。就像你不需要在ExitProcess之前打擾CloseHandle一樣。