Closed snemoto-42 closed 10 months ago
・デフォルト動作でプログラムを終了するシグナルを無視する 参考)書籍「Linuxプログラミングバイブル」シグナル管理と無視 SIGINT : ctrl+c SIGQUIT : ctrl+\ SIGPIPE : 接続先がないパイプやソケットの書き込み SIGHUP : kill(2)で送る SIGALRM : alarm(2)からのタイマー SIGUSR1/SIGUSR2 : killコマンド SIGTTIN/SIGTTOU : バックグラウンドのプロセスが端末からの入力、端末からの出力を行うときに発生
・ctrl+d (EOFの入力)では既にプログラムは終了しない ・SIGTERMは無視しないように設定。クライアント側(別のターミナルなど)でkill -TERM [pid]を実行してプログラムを終了させる
シグナル周りのNGINX仕様 https://nginx.org/en/docs/control.html
TODO ・無視するシグナルが送られた後、何かしらのエラーハンドリングが必要か最新のmain branchコードから検証する(システムコール周り以外だと?)
・接続が閉じられるテストケースとは?curlをSIG_INTする?
・仮に処理が必要な場合、sigactionが禁止なのでsignalの引数に関数 --- .h --- typedef void (*t_sighandler)(int); t_sighandler signal(int sig, t_sighandler handler); --- .c --- signal(SIGUSR1, sr_to_ch); void sr_to_ch(int sig)
Server.cppにてSIGPIPEやEINTRを対策済み その他シグナルを管理したい場合はマージを検討
SIGPIPE/SIGHUP/SIGALRM/SIGUSR1/SIGUSR2/SIGTTIN/SIGTTOU を無視するように設定 main branchにマージ済みのためクローズ
[Mandatory] The important thing is resilience. Your server should never die.