【问题标题】:Can I handle the killing of my windows process through the Task Manager?我可以通过任务管理器处理我的 Windows 进程的终止吗?
【发布时间】:2009-10-06 19:04:58
【问题描述】:

我有一个 Windows C++ 应用程序 (app.exe)。当应用程序关闭时,我需要执行一些特定于我的应用程序的清理任务。当这个进程 (app.exe) 通过任务管理器被杀死时会发生什么。假设应用程序仍然响应,我可以在我的 app.exe 中以某种方式处理这种情况吗?

我正在寻找类似于 Linux 中的kill <pid> 将 SIGTERM 信号发送到 pid 指示的进程的方式。然后我可以为 SIGTERM 注册我自己的信号处理程序并执行清理。

【问题讨论】:

    标签: windows process


    【解决方案1】:

    在任务管理器中有两种方法可以杀死应用程序。

    • 通过 Applications 选项卡杀死大致相当于SIGTERM。应用程序可能会拦截它并进行更多处理,因为它基本上是在发送“关闭窗口”消息。要捕获的消息是WM_CLOSE
    • 通过进程选项卡杀死将大致相当于SIGKILL。除了监视用户在任务管理器的列表框和结束进程按钮中的操作,或者有一个看门狗进程来查看第一个进程何时被杀死之外,您无能为力。

    或者,以不需要清理的方式设计应用程序,或者以在启动时执行清理的方式设计应用程序。

    【讨论】:

    • 很遗憾,无法重新设计应用程序。它是一个已有 10 年历史的旧版应用程序,拥有数千行代码。
    • 请注意,googlers:不过,控制台应用程序中没有WM_CLOSE。您需要调用SetConsoleCtrlHandler 来注册您的处理程序以处理CTRL_CLOSE_EVENT 以关闭(即“SIGTERM”)。
    【解决方案2】:

    我认为您将需要另一个 PID 来监控您的 app.exe 的 PID 并在当时执行必要的工作。

    【讨论】:

      【解决方案3】:

      这取决于,如果用户选择“结束任务”您的应用程序,您将收到通知,您可以处理它see this.

      但如果用户选择结束进程,您将无法在应用程序中处理它。最简单的方法是第二个进程,或者您可以注入进程管理器并挂钩 TerminateProcess API。

      【讨论】:

        猜你喜欢
        • 2014-12-30
        • 2015-04-28
        • 2019-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多