CTRL+C 및 CTRL+BREAK 신호
CTRL+C 및 CTRL+BREAK 키 조합은 콘솔 프로세스에서 특수 처리를 받습니다. 기본적으로 콘솔 창에 키보드 포커스가 있으면 CTRL+C 또는 CTRL+BREAK는 키보드 입력이 아닌 신호(SIGINT 또는 SIGBREAK)로 처리됩니다. 기본적으로 이러한 신호는 콘솔에 연결된 모든 콘솔 프로세스에 전달됩니다. (분리된 프로세스는 영향을 받지 않습니다. 콘솔 만들기를 참조하세요.) 시스템은 이벤트를 처리할 새 스레드를 각 클라이언트 프로세스에 만듭니다. 프로세스가 디버그되면 스레드에서 예외를 발생시킵니다. 디버거는 예외를 처리하거나 처리되지 않은 예외를 계속 진행할 수 있습니다.
CTRL+BREAK는 항상 신호로 처리되지만, 애플리케이션에서 처리기 함수가 호출되지 않도록 하는 다음 두 가지 방법으로 기본 CTRL+C 동작을 변경할 수 있습니다.
- SetConsoleMode 함수는 콘솔의 입력 버퍼에 대해 ENABLE_PROCESSED_INPUT 입력 모드를 사용하지 않도록 설정할 수 있으므로 CTRL+C는 신호가 아닌 키보드 입력으로 보고됩니다.
- SetConsoleCtrlHandler가 해당 매개 변수에 대해 NULL 및 TRUE 값으로 호출되면 호출 프로세스에서 CTRL+C 신호를 무시합니다. 정상적인 CTRL+C 처리는 SetConsoleCtrlHandler를 NULL 및 FALSE 값으로 호출하여 복원됩니다. CTRL+C 신호를 무시하거나 무시하지 않는 이 특성은 자식 프로세스에서 상속되지만, 기존 프로세스에 영향을 주지 않고 모든 프로세스에서 사용하거나 사용하지 않도록 설정할 수 있습니다.
시간 제한을 포함하여 이러한 신호를 처리하는 방법에 대한 자세한 내용은 HandlerRoutine 콜백 설명서를 참조하세요.