2015-09-02 83 views
4

Microsoft Technet我可以讀taskkill有一個/f參數來強制終止進程。我想知道這在內部會發生什麼,以瞭解這種行爲的影響。taskkill和taskkill/f之間的差異

taskkill(沒有/f)不會簡單地向進程發送WM_CLOSE消息,否則我的應用程序會詢問是否保存打開的文檔。這使我認爲它已經在TerminateProcess (MSDN)級別上運行。但是,TerminateProcess沒有強制殺死的參數。

那麼,taskkilltaskkill /f在內部做什麼?

我看過相關的問題Difference between C# Process.Kill() and Taskkill但它沒有答案。

回答

2

最有可能taskkill /f使用TerminateProcess,那裏的taskkill沒有/f只是職位WM_QUIT消息(未WM_CLOSE)。該文件表示TerminateProcess無條件殺死該進程。

你可以試試以下實驗:

  1. 啓動的notepad.exe,並在notpad窗口
  2. 類型taskkill /f /im notepad.exe鍵入幾個字符。記事本將退出立即

現在做到這一點:

  1. 啓動的notepad.exe,並在notpad窗口
  2. 類型taskkill /im notepad.exe鍵入幾個字符。記事本不會立即退出,但它會退出詢問您是否要保存修改。
+1

好的,所以在正常情況下,我的應用程序應該能夠處理所有掛起的Windows消息,但在'/ f'的情況下它不能。因此,正常情況可能不會終止處於「無響應」狀態的應用程序,因爲「不響應」意味着Windows已檢測到應用程序不再處理消息。 –

+0

@Thomas正好。 –

+0

「WM_QUIT」消息不太可能導致記事本顯示其「保存修改?」。對話;在收到「WM_QUIT」時,你的主窗口通常不見了。 –

相關問題