O pressionamento de tecla gera uma interrupção, assim como você descobriu. A interrupção é processada por um manipulador de interrupção; qual manipulador depende do tipo de hardware, por exemplo Teclado USB ou teclado PS / 2. O manipulador de interrupção lê o código de chave do hardware e o armazena em buffer. Do buffer, o caractere é captado pelo driver tty, que, no caso de Ctrl-C, o reconhece como o caractere de interrupção e envia um SIGINT
para o grupo de processos de primeiro plano do terminal. Veja n_tty.c .
Observe que o driver tty está envolvido apenas em interfaces do tipo "terminal" (linha de comando), como o console do Linux, terminais seriais ( /dev/ttyS*
) e pseudo ttys. Sistemas GUI (X11, implementações Wayland) lidam com dispositivos de entrada de maneira diferente.