在正在运行的进程上关闭Windows终端

时间:2013-12-11 05:25:54

标签: windows process terminal signals command-prompt

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

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

3 个答案:

答案 0 :(得分:5)

通过您在SetConsoleCtrlHandler注册的回调提供等效的SIGHUP。您的回调函数将在具有dwCtrlType = CTRL_CLOSE_EVENT的任意线程池线程上调用。你有5秒的时间来清理,你不能取消关闭。

this MSDN article

中提供了示例代码

答案 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.
});