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.