The kernel's terminal driver (termios
) interprets the special keys that can be typed to send a signal to a process, send end of file, erase characters, etc. This is basic Unix kernel functionality and very similar on most Unix and Linux implementations.
The stty
command displays or sets the termios
special characters, as well as other parameters for the terminal line driver.
Invoke stty -a
to see the current values of the special characters and other "terminal line settings". In the following examples, you can see that intr
is Ctrl+C, eof
is Ctrl+D, susp
is Ctrl+Z. (I've deleted other output to show only the special character settings):
stty -a
special chars on 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
special characters on 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;
To change the value of a special character, for example, to change the interrupt character from Ctrl+C to Ctrl+E invoke stty
like this (^E
is literally two characters, the circumflex (^
) followed by the letter E
):
stty intr '^E'
For more information see the man pages for stty
and termios
. On GNU/Linux you can also look at the tty_ioctl
man page.
Notes:
The intr
key (Ctrl+C by default), doesn't actually kill the process, but causes the kernel to send an interrupt signal (SIGINT
) to all processes within the process group. The processes may arrange to catch or ignore the signal, but most processes will terminate, which is the default behavior.
The reason that Ctrl+d logs you out is because the terminal line driver sends EOF (end of file) on the standard input of the shell. The shell exits when it receives end of file on it's standard input.
bind -p
to list, so ashelp bind
for other