図1 シグナル・ハンドラの動作。ある処理を割り込ませたい場合,カーネルがシグナルを発生させます。シグナルが発生すると実行中のプロセスが中断され,特定の処理が実行されます。
図1 シグナル・ハンドラの動作。ある処理を割り込ませたい場合,カーネルがシグナルを発生させます。シグナルが発生すると実行中のプロセスが中断され,特定の処理が実行されます。
[画像のクリックで拡大表示]

 シグナルは,プロセス間で連絡を取り合うための仕組みです。実行中のプロセスの処理をいったん止めて,別のプロセスを処理したい場合などに用いられます。シグナルは,Linuxカーネルに実装されています。

 シグナルは,キーボードからの割り込み「SIGINT」や浮動小数点例外「SIGFPE」,プロセスの終了「SIGTERM」など,30種類以上が用意されています。ちなみにこれらのシグナルは,プログラム(プロセス)自身の動作によって発生する「同期シグナル」,外的な要因で発生する「非同期シグナル」の2種類に分けられています。

 シグナルの具体的な動作は,次のようになります。あるプロセスの実行中に処理を割り込ませたい場合,カーネルがシグナルを発生させます。シグナルが発生すると実行中のプロセスが中断され,特定の処理が実行されます(図1)。

 この特定の処理を「シグナル・ハンドラ」と呼びます。シグナルは突然発生するものですから,発生するシグナルごとに実行したい処理を,あらかじめシグナル・ハンドラとして登録しておきます。