【问题标题】:termination of process in C/C++ windows在 C/C++ 窗口中终止进程
【发布时间】:2011-11-03 11:50:59
【问题描述】:

我试图捕捉进程结束的时间(例如通过在任务管理器中杀死它)。为了当它检测到(在已结束的进程内)时,在退出做一些工作之前。 我的应用并没有通过itslef结束(无限循环)

我试过了:1) atexit 2) SetUnhandledExceptionFilter

我尝试在调试运行中简单地关闭正在运行的应用程序,但最终没有达到执行额外任务的目的。

帮助,

【问题讨论】:

    标签: c++ c windows process termination


    【解决方案1】:

    这应该回答你的问题:

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

    通过应用程序选项卡杀死大致相当于 SIGTERM(在 Linux 中)。应用程序可能会拦截它并进行更多处理,因为它基本上是在发送“关闭窗口”消息。要捕获的消息是 WM_CLOSE。

    通过进程选项卡杀死大致相当于 SIGKILL(在 Linux 中)。除了监视用户在任务管理器的列表框和结束进程按钮中的操作,或者有一个看门狗进程来查看第一个进程何时被杀死

    【讨论】:

    • 不错...不过你是从哪里引用的?
    • @JonasHeidelberg 在 SO 上有类似的帖子。但是问题不同。
    【解决方案2】:

    枚举所有正在运行的进程。完成此操作后,您将获得进程 ID。通过之前获取的ID获取每个进程的句柄,找到你要找的进程。 在单独的线程中使用相同的进程句柄,如下所示:

    WaitForSingleObject(hProcess, INFINITE);

    一旦进程终止,这个线程就会结束。

    【讨论】:

    • 在同一个进程中,而不是其他进程中
    • 对不起,我错过了你原来的帖子。我想你将不得不为此目的创建一个单独的进程(看门狗)。当您终止该进程时,操作系统将释放该进程使用的所有资源。您不能在终止进程中处理进程终止。
    • 是的,我搜索了很多,并认为在同一个过程中是不可能的。谢谢
    【解决方案3】:

    在控制台应用程序中,您应该考虑安装 HandlerRoutine callback 函数来捕获 CTRL_C_EVENT、CTRL_BREAK_EVENT、CTRL_CLOSE_EVENT、CTRL_LOGOFF_EVENT、CTRL_SHUTDOWN_EVENT。

    在 GUI 应用程序中,您应该考虑处理 WM_CLOSEWM_QUERYENDSESSIONWM_ENDSESSION

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-21
      • 2011-01-15
      • 1970-01-01
      • 2012-07-17
      • 2020-05-23
      • 1970-01-01
      • 2012-10-06
      • 2021-09-15
      相关资源
      最近更新 更多