[unix]ctrl-dとctrl-cについて

2016年5月30日月曜日

linux unix

インタラクティブに標準入力から読み込むコマンドを終了させるのにctrl-dを押すやり方とctrl-cを押すやり方がある。

例えば、bcコマンドの場合、以下のようになる。
$ bc -q
(ここでctrl-dを押す)
$

$ bc -q
(ここでctrl-cを押す)
^C
(interrupt) Exiting bc.
$

どちらもbcコマンドが終了するけど、なぜ終了するかは違ってくる。
ctrl-dはEOFを送出するキーでbcが標準入力から読み込んでEOFを検出することにより、プログラムを終了する。
これは通常の動きだ。

ctrl-cはSIGINTシグナルをプロセスに送信する。
そのため、bcが割り込みを受け、プロセスを終了する。

だから、ctrl-dは標準入力からの読み込みを待っているプロセスにしか使えないことになる。