割り込みキーとシグナル
特定のキーを押下することでもシグナルを送信できます。
※ フォアグラウンドにあるプロセスグループ内の全プロセスへ送信
Ctrl + C (^C) ... SIGINT
Ctrl + \ (^\) ... SIGQUIT
Ctrl + Z (^Z) ... SIGTSTP
たとえば、次のような 1 秒ごとにメッセージを表示するコマンドに対して <kbd>Ctrl</kbd> + <kbd>C</kbd> (^C) を押下すると、SIGINT シグナルが送信され、標準動作 (Term) によりコマンドが終了します。
code:割り込みキーの実行例
$ while :; do sleep 1; echo "Stop me !"; done
Stop me !
Stop me !
Stop me !
^C
割り込みキーと対応シグナルの確認方法
どの割り込みキーがどのシグナルに対応しているかは、$ stty -a と $ man stty から確認できます。
まず $ stty -a を実行すると、intr = ^C; quit = ^\\; susp = ^Z; という文字列があることが分かります。左の文字列が割り込みキーの意味を示し、右の ^C などが対応する割り込みキーを示します。
code: stty -a の出力例
speed 38400 baud; rows 27; columns 176; line = 0;
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;
discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc
そして、左の文字列 (intr, quit, susp) の意味を man 1 stty で調べると、それぞれ何のシグナルを送信するか分かります。
code: man 1 stty
--- snip ---
Special characters:
--- snip ---
intr CHAR
CHAR will send an interrupt signal
--- snip ---
quit CHAR
CHAR will send a quit signal
--- snip ---
susp CHAR
CHAR will send a terminal stop signal
--- snip ---
--- snip ---