O driver de terminal do kernel ( termios ) interpreta as teclas especiais que podem ser digitadas para enviar um sinal para um processo, enviar final de arquivo, apagar caracteres, etc. Esta é a funcionalidade básica do kernel Unix e muito similar na maioria dos Unix e implementações Linux.
O comando stty exibe ou define os caracteres especiais termios , além de outros parâmetros para o driver da linha de terminal.
Invoque stty -a para ver os valores atuais dos caracteres especiais e outras "configurações de linha de terminal". Nos exemplos a seguir, você pode ver que intr é Ctrl + C , eof é Ctrl + D , susp é Ctrl + Z . (Eu deletei outra saída para mostrar apenas as configurações especiais de caracteres):
stty -a caracteres especiais no GNU / Linux:
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
stty -a caracteres especiais no FreeBSD:
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = ^@; eol2 = ^@;
erase = ^?; erase2 = ^H; intr = ^C; kill = ^U; lnext = ^V;
min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
stop = ^S; susp = ^Z; time = 0; werase = ^W;
Para alterar o valor de um caractere especial, por exemplo, para alterar o caractere de interrupção de Ctrl + C para Ctrl + E invoque stty assim ( ^E é literalmente dois caracteres, o circunflexo ( ^ ) seguido da letra E ):
stty intr '^E'
Para mais informações, consulte as man pages de stty e termios . No GNU / Linux, você também pode ver a página tty_ioctl man.
Notas:
A tecla intr ( Ctrl + C por padrão), na verdade, não mata o processo, mas faz com que o kernel envie um sinal de interrupção ( SIGINT ) para todos os processos dentro do grupo de processos. Os processos podem organizar para capturar ou ignorar o sinal, mas a maioria dos processos terminará, que é o comportamento padrão.
O motivo pelo qual Ctrl + d desconecta você é porque o driver da linha de terminal envia EOF (fim de arquivo) na entrada padrão do shell. O shell sai quando recebe o final do arquivo em sua entrada padrão.