Reputation: 118500
In a command prompt window, I have a running process. While the process is still executing, I click the (red) 'X' in the corner of the command prompt window. The command prompt window closes, and the running process is terminated.
On Linux, closing the parent terminal of a running process will send that process SIGHUP
. How do I catch this event on Windows?
Upvotes: 2
Views: 2966
Reputation: 21
"SIGHUP"... tested on Windows 8.1 pro + Node.js 0.10.24 works fine..
process.on('SIGHUP', function(){
//Your code goes here.
});
Upvotes: 0
Reputation: 941397
The equivalent of SIGHUP is provided through the callback you register with SetConsoleCtrlHandler. Your callback function will be called on an arbitrary threadpool thread with dwCtrlType = CTRL_CLOSE_EVENT. You've got 5 seconds to clean-up, you cannot cancel the close.
Sample code is available in this MSDN article
Upvotes: 5
Reputation: 7046
This cannot be done directly from command prompt. You would need a secondary anything (vbs, powershell or custom MyApp.exe) to catch cmd.exe when it is closed and react accordingly.
For instance, a VBS WMI monitor.
strComputer = "."
Set objSWbemServices = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!" & "\\" & strComputer & "\root\cimv2")
Set objEventSource = objSWbemServices.ExecNotificationQuery( "SELECT * FROM __InstanceDeletionEvent WITHIN 1 WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name = 'cmd.exe'")
Set objEventObject = objEventSource.NextEvent()
Wscript.Echo "CMD.exe closed"
Upvotes: 0