が押されているC間に押すとCtrl、キー押下とそれに続くキーリリースX11イベントがターミナルエミュレータに送信されます。
そのイベント(通常はキーを押すイベント)で、ターミナルエミュレーターは、0x3バイト(^C
)を擬似ttyデバイスのマスター側のファイル記述子に書き込みます。
場合isig
のtermiosは、デバイスの設定であり、場合にintr
設定がその0x3のバイトに設定され、その後、カーネルは、すべてのメンバーにSIGINT信号を送信するフォアグラウンドプロセスグループの端末装置(PTY装置に記憶された他の属性)の。その場合、0x3バイトはptyのスレーブ側での読み取りに使用できなくなります。
通常はsetpgid()
、シェルジョブのプロセスグループ(を使用)を作成し、フォアグラウンドに配置する(tcsetpgrp()
ptyデバイスの属性を設定する)かどうかを決定する対話型シェルです。
たとえば、対話型シェルのプロンプトで実行する場合:
foo | bar
シェルは、2つのプロセス(それが実行されると、新しいプロセスグループを開始foo
し、bar
その標準入力/出力管とを接続した後)とプットフォアグラウンドでそのグループ。Ctrl-Cを押すと、両方のプロセスがSIGINTを受け取ります。
に:
foo | bar &
同じですが、プロセスグループはフォアグラウンドに置かれていません(シェルはそれを待機しないため、他のコマンドを入力できます)。これらのプロセスはCtrl-CでSIGINTを取得しませんが、ttyデバイスから読み取ろうとすると中断される可能性があります。
さらに読む:各擬似端末(PTY)コンポーネント(ソフトウェア、マスター側、スレーブ側)の責任は何ですか?