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