2013-12-11 2 views
2

명령 프롬프트 창에서 실행중인 프로세스가 있습니다. 프로세스가 계속 실행되는 동안 명령 프롬프트 창의 모서리에있는 (빨간색) 'X'를 클릭합니다. 명령 프롬프트 창이 닫히고 실행중인 프로세스가 종료됩니다.실행중인 프로세스에서 Windows 터미널을 닫습니다.

Linux에서는 실행중인 프로세스의 상위 터미널을 닫으면 해당 프로세스가 SIGHUP으로 전송됩니다. Windows에서이 이벤트를 어떻게 잡을 수 있습니까?

답변

5

SIGHUP에 해당하는 것은 SetConsoleCtrlHandler으로 등록한 콜백을 통해 제공됩니다. 콜백 함수는 dwCtrlType = CTRL_CLOSE_EVENT 인 임의의 스레드 풀 스레드에서 호출됩니다. 정리하는 데 5 초가 남았으므로 닫기를 취소 할 수 없습니다.

샘플 코드는 this MSDN article

0

명령 프롬프트에서 직접 수행 할 수 없습니다. cmd.exe가 닫 혔을 때이를 잡아 내고 이에 따라 반응하려면 2 차적 (vbs, powershell 또는 custom MyApp.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" 
+0

나는 초점을 맞춘보다 레이저를 선호하지만 cmd.exe의 정확한 PID를 추적하여 우연히 다른 cmd.exe 인스턴스에서 트리거하지 않도록하십시오. 여전히 아이디어를 얻습니다. –

+0

또한이 옵션은 Red X 또는 일괄 처리가 단순히 완료된 경우 일괄 처리가 끝나기 전에 WMI 모니터를 취소하기 위해 추가 논리를 일괄 처리 스크립트 끝에 추가해야하므로 정상적으로 완료 될 때 트리거되지 않습니다. –

+0

실제 프로그래밍 언어에서 콘솔 닫기 이벤트에 콘솔 제어 처리기 및 트랩을 사용할 수 있습니다. –

0

"SIGHUP"에서 사용할 수 있습니다 ... 윈도우 8.1에서 테스트 프로 + Node.js를 0.10.24 잘 작동 ..

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