Segnali CTRL+C e CTRL+INTERR

Le combinazioni di tasti CTRL+C e CTRL+INTERR ricevono una specifica gestione da parte dei processi della console. Per impostazione predefinita, quando una finestra della console dispone dello stato attivo della tastiera, CTRL+C o CTRL+INTERR viene considerato come segnale (SIGINT o SIGBREAK) e non come input da tastiera. Per impostazione predefinita, questi segnali vengono passati a tutti i processi della console collegati alla console. (I processi scollegati non sono interessati. Vedere Creazione di una console. Il sistema crea un nuovo thread in ogni processo client per gestire l'evento. Il thread genera un'eccezione se è in corso il debug del processo. Il debugger può gestire l'eccezione o continuare a lasciarla non gestita.

CTRL+INTERR viene sempre considerato come segnale, ma un'applicazione può modificare il comportamento predefinito di CTRL+C in due modi che impediscono la chiamata delle funzioni gestore:

  • La funzione SetConsoleMode può disabilitare la modalità di input ENABLE_PROCESedizione StandardD_INPUT per il buffer di input di una console, quindi CTRL+C viene segnalato come input da tastiera anziché come segnale.
  • Quando SetConsoleCtrlHandler viene chiamata con i valori NULL e TRUE per i relativi parametri, il processo chiamante ignora i segnali di CTRL+C. La normale elaborazione di CTRL+C viene ripristinata chiamando SetConsoleCtrlHandler con i valori NULL e FALSE. Questo attributo che consente di ignorare o meno i segnali di CTRL+C, viene ereditato dai processi figlio, ma può essere abilitato o disabilitato da qualsiasi processo senza influire sui processi esistenti.

Per altre informazioni sull'elaborazione di questi segnali, inclusi i timeout, vedere la documentazione della funzione di callback HandlerRoutine.