在命令提示符窗口中,我有一个正在运行的进程。当进程仍在执行时,我单击命令提示符窗口一角的(红色)“X”。命令提示符窗口关闭,正在运行的进程终止。
在Linux上,关闭正在运行的进程的父终端将发送该进程SIGHUP
。如何在Windows上捕获此事件?
答案 0 :(得分:5)
通过您在SetConsoleCtrlHandler注册的回调提供等效的SIGHUP。您的回调函数将在具有dwCtrlType = CTRL_CLOSE_EVENT的任意线程池线程上调用。你有5秒的时间来清理,你不能取消关闭。
中提供了示例代码答案 1 :(得分:0)
这不能直接从命令提示符完成。您需要一个辅助任何东西(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"
答案 2 :(得分:0)
“SIGHUP”...在Windows 8.1 pro + Node.js上测试0.10.24正常工作..
process.on('SIGHUP', function(){
//Your code goes here.
});