Ctrl+C 和 CTRL+BREAK 信号 - Windows Console In 巴西队世界杯名单 @2025-09-11 02:51:46
CTRLC 和 CTRL++BREAK 键组合通过控制台进程接收特殊处理。 默认情况下,当控制台窗口具有键盘焦点时,CTRLC 或 CTRL++BREAK 被视为信号(SIGINT 或 SIGBREAK),而不是键盘输入。 默认情况下,这些信号将传递到附加到控制台的所有控制台进程。 (分离的进程不受影响。请参阅 创建控制台。)系统在每个客户端进程中创建新的线程来处理事件。 如果正在调试进程,线程将引发异常。 调试器可以处理异常或继续处理异常。
CTRL+BREAK 始终被视为信号,但应用程序可以通过两种方式更改默认 CTRL+C 行为,以防止调用处理程序函数:
SetConsoleMode 函数可以禁用主机输入缓冲区的ENABLE_PROCESSED_INPUT输入模式,因此 CTRL+C 报告为键盘输入而不是信号。
当为其参数使用 NULL 值和 TRUE 值调用 SetConsoleCtrlHandler 时,调用进程将忽略 CTRL+C 信号。 使用 NULL 和 FALSE 值调用 SetConsoleCtrlHandler 来还原普通 CTRL+C 处理。 忽略或不忽略 CTRL+C 信号的此属性由子进程继承,但任何进程都可以启用或禁用它,而不会影响现有进程。
有关如何处理这些信号的详细信息,包括超时,请参阅 处理程序例程 回调文档。