What is the difference between killing an application using the close button and ending the process from the Task Manager?
I am aware of the fact that hitting the close button posts a WM_CLOSE
message in the message queue, but I don't know what happens when we kill a process from Task Manager (or any similar application like Killbox or Process Explorer).
Killing the process with
WM_CLOSE
simply signals the process with the message and allows the target to handle the message and exit gracefully. Alternatively, the process could choose not to exit in itsWM_CLOSE
handler.Killing the process via task manager will do so with TerminateProcess which is far harsher:
When you click the "X" button in the title bar of an application's window, that sends the window a
WM_CLOSE
message. This is a "graceful" shutdown—the application processes the message, handles any necessary cleanup tasks, and can even refuse to shut down if it so desires (by returning zero in response to the message).WM_CLOSE
is simply a request that the window or application terminate; the window is not destroyed until the application itself calls theDestroyWindow
function.When you press the "End Task" button in Task Manager, Windows will first try to send the application (if it is a GUI application) a
WM_CLOSE
message. In other words, it first asks nicely and gives the app a chance to terminate itself cleanly.*If you fail to close in response to that initial
WM_CLOSE
message, the Task Manager will follow up by calling theTerminateProcess
function. This function is a little bit different because it forcefully terminates the application's process and all of its threads without asking for permission from the app. This is a very harsh method of closing something, and should be used as a last resort—such as when an application is hung and is no longer responding to messages.TerminateProcess
is a very low-level function that essentially rips the user-mode part of a process from memory, forcing it to terminate unconditionally. CallingTerminateProcess
bypasses such niceties as close notifications andDLL_PROCESS_DETACH
. Your application does not have the ability to refuse to close, and there is no way to catch/trap/hook calls toTerminateProcess
. All user-mode code in the process simply stops running for good. This is a very unclean shut down procedure, somewhat akin to jerking the computer's power plug out of the wall.* Note that this only true if you use the "Applications" tab of Task Manager to kill the application. If you use the "Processes" tab, this step is skipped and the
TerminateProcess
function is called immediately. This distinction is reflected in the caption on the respective buttons. For the "Applications" tab, the button is lableled "End Task"; for the "Processes" tab, the button is labeled "End Process".If you close an application using the close button you let the application to perform necessary closing tasks if any. If you kill a process from task manager there is no chance for application to perform those tasks, you just terminate the application without informing.