68user's page 掲示板

Prev< No. 1893> Next  [最新発言に戻る] [過去ログ一覧]
No. 1893 # 68user 2001/04/12 (木) 14:47:46
>>1892 dio
> プロセスはSIGKILLやSIGSTOPを認識出来ないのではないのですか?
できないです。

OS はプロセスごとにシグナルのテーブルを保持しています。例えば
SIGTERM を無視する場合はテーブルの SIGTERM の項目を 1 に、
シグナルハンドラをセットする場合は、SIGTERM の項目にシグナル
ハンドラ (関数) のアドレスをセットする、というふうに。

で、シグナルが飛んできたら、OS は対象のプロセスのテーブルを
参照し、無視すべきか、ハンドラを実行すべきかなどを決めます。

しかし SIGKILL/SIGSTOP は、
    - テーブルの書き換えができない
    - シグナル発生時に OS がテーブルを参照することなくプロセスを操作する
のどちらかの理由のため (どっちが本当かは知りません)、プロセス
からブロックすることはできません。


だから、実際に OS が何かをプロセスに送っているわけではありません。

…で、回答になりましたか?

ちなみにシグナルは FreeBSD なら ここらへんで処理してます。
    http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/sys/kern/kern_sig.c?rev=1.115

Prev< No. 1893> Next  [最新発言に戻る] [過去ログ一覧]