プロセスのキャンセル

もう少し考えてみた。例えば、キャンセル(KILL)したいプロセスにシグナルを送るとしよう。
シグナルのコールバックは、通常は単純に_exit()するものとする。で、共有メモリの確保中に_exit()するとまずい、という話だったんだけど、例えば共有メモリ確保関数(pards_shmalloc)の直前に、シグナルのコールバックを切り替えてシグナルがあったことだけ記録→抜ける前にシグナルを受けたかどうかチェックして受けていたらプロセスを終了、とかだとどうだろう?他のシステムが提供する関数も同様に。

システムが(公式に)提供する機能だけを使っている限りは大丈夫そうな気もするが…(pards_lock/pards_unlockとかを手で使うとだめだが、そもそもこれらは公開していない)

うーん、まだ落とし穴があるかなぁ…?