SIGSTOPのトラップ?
あれこれ実装すると楽しい気分になれるが、ふと気づくと結局自分のやっていることは既存コードのコピペとちょっとした改変でしかない気がしてきて鬱になる。まあ、どこに何をコピペすればよいか知っている、ということも重要なことではあるのだけれど(コンピュータジョーク - 「エンジニアを理解しよう -- その4」を参照)。
ところで最近取り組んでいるのはシグナル。SIGSTOPについて調べていたら、
SIGTSTP, SIGTTIN, SIGTTOU, SIGSTOPに対応するシグナルハンドラ 登録があれば、そのハンドラの起動を行うと書いてあったので、マジかと思ってあれこれ調べてしまった。多分SIGSTOPは誤りで、SIGSTOPに対しては(SIGKILLも)ブロックもハンドラの設定もできない、というのが正しいと思う(manpage of sigaction(2)にもそうある)。
SIGSTOP は、それを受けるプロセスはトラップできないし、無視することもできない。(SIGSTOP問題)SIGCONTにはハンドラを設定できるので、SIGCONTで端末の設定を戻したりすることはできるらしい。この辺の処理は、kernel 2.6.13だとlinux/kernel/signal.cのget_signal_to_deliver()あたり。
« ロッテ優勝 | Main | D200リーク情報? »

Comments
C-c が効かないのなら C-z -> kill -KILL なわけですな
Posted by: もわ | October 27, 2005 at 07:38 AM
C-cが効かないプロセスなんて…と思ったけどよく考えるとC-cはSIGKILLじゃなくてSIGINTでした。
Posted by: fujita.h | October 27, 2005 at 01:36 PM