各プロセス毎に、シグナル管理用のデータ構造をtask_struct構造体内に持つ。
struct task_struct {
:
int sigpending //処理すべきシグナル保留中
sigset_t signal //受信シグナル
sigset_t blocked //マスクするシグナル
signal_struct *sig //シグナルハンドラ登録テーブルへのポインタ
:
}
捕捉 元々UNIXのシグナル機能はは、killというシステムコールからもわかるとおり走行中のプロセスを強制的に殺す程度のことしか考えられずに設計されている。
その後、次第にシグナルの機能が拡張されていき様々な機能を持つに至った。しかし使う側からは便利だが、一貫性の無い機能拡張のおかげでカーネル内のシグナルハンドリングに関する実装はかなりボロボロである。
最近は、複数のシグナルが連続して発生したとき、シグナルハンドラ起動をその発生順に行えるようにするための機能が拡張されている。
(NIS)HirokazuTakahashi
2000年12月09日 (土) 23時55分06秒 JST1