daemon もどき

NetBSD サーバー上で動かしていた daemon もどきのソフト(Python で書かれている)が、SIGALRM による watchdog を組み込んでいるのに、なぜか固まっているのを発見した。
まだ分析できてないけど、print で標準出力に定期的にメッセージを出している部分で、端末の Ctrl-s(フロー制御)か、あるいは screen コマンドのバックスクロールか何かの理由で表示できなくなり、折角の watchdog が効いていなかったように見える。つまり、write システムコールがブロックしてしまい、シグナルハンドラに飛ばなかった?? でも、write システムコールのマニュアルを読むと、途中でシグナルを受信したら EINTR のエラーで返ってくると書かれているんだけど。。。謎。
昔、daemon の書き方の参考書で、起動したら最初に制御端末を close しろ、と書かれていた意味を、20年も経ってからようやく理解した感じ。
…分析は明日にしよう。