Linuxカーネルに関する技術情報を集めていくプロジェクトです。現在、Linuxカーネル2.6解読室の第2章までを公開中。
各プロセス毎に、シグナル管理用のデータ構造をtask_struct構造体内に持つ。
struct task_struct { : int sigpending //処理すべきシグナル保留中 sigset_t signal //受信シグナル sigset_t blocked //マスクするシグナル signal_struct *sig //シグナルハンドラ登録テーブルへのポインタ : }
捕捉 元々UNIXのシグナル機能は、killというシステムコール名からもわかるとおり走行中のプロセスを強制的に殺す程度のことしか考えられずに設計されている。
その後、次第にシグナルの機能が拡張されていき様々な機能を持つに至った。しかし使う側からは便利だが、一貫性の無い機能拡張のおかげでカーネル内のシグナルハンドリングに関する実装はかなりボロボロである。
最近は、複数のシグナルが連続して発生したとき、シグナルハンドラ起動をその発生順に行えるようにするための機能が拡張されている。
(NIS)HirokazuTakahashi
2000年06月11日 (日) 22時29分57秒 JST1
[PageInfo]
LastUpdate: 2008-08-27 14:46:03, ModifiedBy: hiromichi-m
[Permissions]
view:all, edit:login users, delete/config:members