2009-10-06 85 views
4

我有一個Windows C++應用程序(app.exe)。當應用程序關閉時,我需要執行特定於我的應用程序的一些清理任務。當此進程(app.exe)通過任務管理器終止時會發生什麼情況。假設應用程序仍然響應,我可以以某種方式處理我的app.exe中的這種情況嗎?我可以通過任務管理器處理我的Windows進程嗎?

我正在尋找類似於Linux中的kill <pid>將SIGTERM信號發送到由pid指示的進程的內容。然後,我可以爲SIGTERM註冊我自己的信號處理程序並執行清理。

回答

9

有兩種方法可以在任務管理器中關閉應用程序。

  • 通過應用殺死標籤將大致等同的SIGTERM。應用程序可能會攔截它並執行更多處理,因爲它基本上是發送「關閉窗口」消息。留言是WM_CLOSE
  • 通過殺死進程選項卡大致相當於SIGKILL。在任務管理器的列表框和「結束進程」按鈕中監視用戶的操作,或者讓監視程序進程可以看到第一個被殺死的時間,您就無法做出任何攔截。

或者,以不需要清理的方式設計應用程序,或以啓動時執行清理的方式設計應用程序。

+0

不幸的是,無法重新設計應用程序。它是一個擁有數千行代碼的10年曆史應用程序。 – Umair 2009-10-06 19:36:24

0

我想你將需要另一個PID來監視你的app.exe的PID,並在當時做必要的工作。

0

這就要看,如果用戶選擇「結束任務」應用程序會通知您,您可以處理它see this.

但如果用戶選擇終止過程中,你有沒有辦法來處理它你的申請。最簡單的方法將是第二個進程,或者您可以注入進程管理器並掛接TerminateProcess API。

相關問題