抓住Windowsterminalclosures正在运行的进程

命令提示符窗口中,我有一个正在运行的进程。 在进程仍在执行的过程中,我单击命令提示符窗口一angular的(红色)“X”。 命令提示符窗口closures,正在运行的进程终止。

在Linux上,closures正在运行的进程的父terminal将发送该进程SIGHUP 。 如何在Windows上捕获此事件?

Solutions Collecting From Web of "抓住Windowsterminalclosures正在运行的进程"

通过使用SetConsoleCtrlHandler注册的回调提供了相当于SIGHUP的功能 。 您的回调函数将在dwCtrlType = CTRL_CLOSE_EVENT的任意线程池线程上调用。 你有5秒钟的清理,你不能取消关闭。

示例代码在此MSDN文章中可用

这不能从命令提示符直接完成。 你需要一个辅助的东西(vbs,powershell或自定义的MyApp.exe)来捕捉cmd.exe,当它关闭并作出相应的反应。

例如,一个VBS WMI监视器。

 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" 

“SIGHUP”…测试在Windows 8.1 pro + Node.js 0.10.24工作正常..

 process.on('SIGHUP', function(){ //Your code goes here. });