POSIX 2013 より前の POSIX 規格では、シグナルハンドラ内で出来ることはかなり制限されてゐました。出来ることはせいぜい volatile な sig_atomic_t 型の静的記憶域期間変数に値を代入することによってフラグを立てる程度でした。 POSIX 2013 ではシグナルハンドラの制約が緩和され、単一スレッドプログラムでは以下の様な場面で「シグナルハンドラ内で何をしても良い」ことになりました。 sigprocmask 関数でシグナルをブロックしておく。また sigaction 関数等でシグナルハンドラを設定しておく。 スレッドにシグナルが送信される (が、ブロックされてゐるのでシグナルハンドラはまだ呼ばれない)。 sigprocmask 関数 (または pselect や sigsuspend 等) でシグナルのブロックを解除する。この時 sigprocmask 関数等