加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 关闭应用程序和从任务管理器结束进程有什么区别?

发布时间:2020-12-14 04:11:14 所属栏目:Windows 来源:网络整理
导读:使用关闭按钮终止应用程序和从任务管理器结束进程有什么区别? 我知道按下关闭按钮会在消息队列中发布WM_CLOSE消息,但我不知道当我们从任务管理器(或任何类似的应用程序,如Killbox或Process Explorer)终止进程时会发生什么. 当您单击应用程序窗口标题栏中的
使用关闭按钮终止应用程序和从任务管理器结束进程有什么区别?

我知道按下关闭按钮会在消息队列中发布WM_CLOSE消息,但我不知道当我们从任务管理器(或任何类似的应用程序,如Killbox或Process Explorer)终止进程时会发生什么.

当您单击应用程序窗口标题栏中的“X”按钮时,会向窗口发送一个 WM_CLOSE message.这是一个“优雅”的关闭 – 应用程序处理消息,处理任何必要的清理任务,甚至可以拒绝关闭如果它如此渴望(通过响应消息返回零). WM_CLOSE只是窗口或应用程序终止的请求;在应用程序本身调用 DestroyWindow function之前,窗口不会被销毁.

当您在任务管理器中按“结束任务”按钮时,Windows将首先尝试发送应用程序(如果它是GUI应用程序)WM_CLOSE消息.换句话说,它首先要求很好,并让应用程序有机会彻底终止自己.*

如果你没有关闭以响应最初的WM_CLOSE消息,任务管理器将通过调用TerminateProcess function进行跟进.这个函数有点不同,因为它强制终止应用程序的进程及其所有线程,而不需要应用程序的许可.这是一种非常苛刻的关闭方法,应该用作最后的手段 – 例如当应用程序挂起并且不再响应消息时.

TerminateProcess是一个非常低级的函数,它基本上从内存中撕掉了进程的用户模式部分,迫使它无条件地终止.调用TerminateProcess会绕过诸如关闭??通知和DLL_PROCESS_DETACH之类的细节.您的应用程序无法拒绝关闭,并且无法捕获/捕获/挂钩对TerminateProcess的调用.此过程中的所有用户模式代码都会停止运行.这是一个非常不干净的关闭程序,有点类似于将计算机的电源插头从墙上拉出来.

*请注意,仅当您使用任务管理器的“应用程序”选项卡来终止应用程序时才会这样.如果使用“进程”选项卡,则跳过此步骤并立即调用TerminateProcess函数.这种区别反映在各个按钮的标题上.对于“应用程序”选项卡,按钮是标题为“结束任务”;对于“进程”选项卡,该按钮标记为“结束进程”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读