windows – 关闭应用程序和从任务管理器结束进程有什么区别?
使用关闭按钮终止应用程序和从任务管理器结束进程有什么区别?
我知道按下关闭按钮会在消息队列中发布WM_CLOSE消息,但我不知道当我们从任务管理器(或任何类似的应用程序,如Killbox或Process Explorer)终止进程时会发生什么.
当您单击应用程序窗口标题栏中的“X”按钮时,会向窗口发送一个
WM_CLOSE message.这是一个“优雅”的关闭 – 应用程序处理消息,处理任何必要的清理任务,甚至可以拒绝关闭如果它如此渴望(通过响应消息返回零). WM_CLOSE只是窗口或应用程序终止的请求;在应用程序本身调用
DestroyWindow function之前,窗口不会被销毁.
当您在任务管理器中按“结束任务”按钮时,Windows将首先尝试发送应用程序(如果它是GUI应用程序)WM_CLOSE消息.换句话说,它首先要求很好,并让应用程序有机会彻底终止自己.* 如果你没有关闭以响应最初的WM_CLOSE消息,任务管理器将通过调用 TerminateProcess是一个非常低级的函数,它基本上从内存中撕掉了进程的用户模式部分,迫使它无条件地终止.调用TerminateProcess会绕过诸如关闭??通知和DLL_PROCESS_DETACH之类的细节.您的应用程序无法拒绝关闭,并且无法捕获/捕获/挂钩对TerminateProcess的调用.此过程中的所有用户模式代码都会停止运行.这是一个非常不干净的关闭程序,有点类似于将计算机的电源插头从墙上拉出来. *请注意,仅当您使用任务管理器的“应用程序”选项卡来终止应用程序时才会这样.如果使用“进程”选项卡,则跳过此步骤并立即调用TerminateProcess函数.这种区别反映在各个按钮的标题上.对于“应用程序”选项卡,按钮是标题为“结束任务”;对于“进程”选项卡,该按钮标记为“结束进程”. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows上安装mpi4py
- Windows – 如何将Araxis设置为MSYS git的diff / merge工具
- 在Windows / C上加速Redis#
- windows – 在Bash中循环:语法错误:意外的文件结束
- 如何在Firebird Embedded中访问UDF DLL?
- 在哪里可以找到Microsoft .NET Framework开发指南?
- windows 10 安装和使用中5个常见问题
- windows-phone-7 – jQuery Mobile changePage()无法在Wind
- xaml – Windows 8 Metro控件的可能VisualStates在哪里记录
- active-directory – 如何禁用域上除内置管理员以外的所有管
- .net – 在非Metro应用程序中使用自定义Windows运
- 生产Windows Web服务器(IIS和SQL)应该在域中吗?
- Windows上的git和系统变量
- windows-10 – Visual Studio 2015:模拟器无法验
- Windows&Appium&Java&Python自动化测
- Windows10 Powershell批量更改后缀名
- Windows8 – 在C#中使用本地化的字符串
- windows – 如何设计/确保Web服务器的高可用性?
- windows-server-2012-r2 – 禁用TLS 1.2停止RST数
- windows-server-2003 – 在远程服务器上启动/停止