질문에 모두 그랬지만 누군가 C++ 콘솔 응용 프로그램을 닫으면 어떻게됩니까? 에서와 같이 상단 모서리에있는 "x"를 클릭하십시오. 즉시 닫습니까? 그것은 일종의 예외를 던집니까? 정의되지 않은 동작입니까?C++ 콘솔 응용 프로그램을 닫을 때 어떤 일이 발생합니까?
답변
상단 코너에 "x"가있는 C++ 콘솔 응용 프로그램을 닫으면 SetConsoleCtrlHandler 기능을 사용하여 제어 처리기를 설정하면 catch하고 처리 할 수있는 CTRL_CLOSE_EVENT
이 표시됩니다. 거기에서 닫기 기능을 무시하고 수행 할 작업을 수행 한 다음 선택적으로 여전히 기본 동작을 수행 할 수 있습니다.
콘솔 닫기를 재정의 할 수 없습니다. 프로세스가'TRUE' 또는'FALSE'를 리턴하는지 여부에 관계없이 프로세스가 종료됩니다. 대신 지연하거나 반환하는 경우 (예 : 정리 작업을하기 전에 프로세스가 종료되기 전에 기본적으로 5 초가 주어집니다. 수동으로'AllocConsole' 또는'AttachConsole'을 호출 했더라도 똑같습니다. 핸들러에서 FreeConsole을 호출하기에는 너무 늦었습니다. 콘솔을 닫는 사용자가 주 프로세스를 종료하지 않아야 콘솔의 하위 프로세스를 사용하고 표준 I/O를 파이프에 연결해야합니다. – eryksun
나는 콘솔 프로세스가 OS에 의해 무시 무시하게 죽임을 당한다고 상상한다. 이 이벤트를 걸러 내고 SetConsoleCtrlHandler 함수처럼 보이는 것을 수행하려는 경우이를 수행하는 방법입니다.
은 참조 :
, 콘솔이 별도의 프로세스로 실행됩니다. 쉘을 닫으면 현재 실행중인 프로세스 나 백그라운드에서 실행되지 않는 프로세스에 SIGHUP 신호를 전송합니다. 프로그래머가 처리하지 않으면 프로세스가 종료됩니다. 터미널과 활성 프로세스로 SSH 세션을 닫으면 동일한 신호가 전송됩니다.
SIGBREAK
은 Windows에서 발생합니다.
관심있는 플랫폼은 무엇입니까? Windows? 리눅스? 그것은 실제로 해답에 영향을 미친다. –
"콘솔 앱"이라는 문구를 사용하면 문자 모드 앱의 MS 용어 인 창을 의미합니다. – AndrewR