シグナル処理
なんで要るのか
SIGTERMを受け取ることで、killされたときも終了処理を行えるようにする
子プロセスをfork-execする場合、二重forkするかSIGCHLDを処理しないと子プロセスがゾンビ化する
- 端末などをWMから起動できるようにするとき
シグナル処理に関する注意: シグナルハンドラの処理中にシグナルが届いた場合の問題
シグナルハンドラ内では自動変数かvolatile sig_atomic_t型の変数しか読み書きしてはいけない
- シグナルハンドラ内では呼んで良い関数に制限がある
シグナルハンドラの設定はsignal()でできるが、signal()の実装は環境によってまちまちらしいので、現代的にはsigaction(POSIXで定義されている)を使うのが良いらしい。ただしsigaction()はC99の範囲外なので、-std=c99とかやってると引っかかる。