簡體   English   中英

在C / C ++ Windows中終止進程

[英]termination of process in C/C++ windows

我試圖趕上進程結束的時間(例如通過在taskmanager中殺死它)。 以便在退出前做一些工作時(在已結束的進程內部)檢測到。 我的應用程序並沒有結束(無限循環)

我試過了:1)atexit 2)SetUnhandledExceptionFilter

我嘗試在調試運行中簡單地關閉正在運行的應用程序,但最終並沒有執行額外的任務。

救命,

這應該可以回答您的問題:

在任務管理器中有兩種殺死應用程序的方法。

通過“應用程序”選項卡殺死將大致等同於SIGTERM(在Linux中)。 應用程序可能會攔截它並進行更多處理,因為它基本上是在發送“關閉窗口”消息。 捕獲的消息是WM_CLOSE。

通過“進程”選項卡殺死將大致等同於SIGKILL(在Linux中)。 除了監視任務管理器的列表框和“結束進程”按鈕中用戶的操作,或者沒有監視程序可以看到第一個進程被殺死時,您無法采取任何措施來攔截它

枚舉所有正在運行的進程。 完成后,您將獲得進程ID。 通過先前獲得的ID獲取每個進程的句柄,然后找到您要查找的進程。 在單獨的線程中使用相同的進程句柄,如下所示:

WaitForSingleObject(hProcess,INFINITE);

一旦進程終止,該線程將結束。

在控制台應用程序中,您應該考慮安裝HandlerRoutine回調函數以捕獲CTRL_C_EVENT,CTRL_BREAK_EVENT,CTRL_CLOSE_EVENT,CTRL_LOGOFF_EVENT,CTRL_SHUTDOWN_EVENT。

在GUI應用程序中,您應該考慮處理WM_CLOSEWM_QUERYENDSESSIONWM_ENDSESSION

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM