ichinose9372 / 42-webserv

c++でnginxを作る課題
2 stars 0 forks source link

シグナル管理 #17

Closed snemoto-42 closed 10 months ago

snemoto-42 commented 10 months ago

[Mandatory] The important thing is resilience. Your server should never die.

snemoto-42 commented 10 months ago

・デフォルト動作でプログラムを終了するシグナルを無視する 参考)書籍「Linuxプログラミングバイブル」シグナル管理と無視 SIGINT : ctrl+c SIGQUIT : ctrl+\ SIGPIPE : 接続先がないパイプやソケットの書き込み SIGHUP : kill(2)で送る SIGALRM : alarm(2)からのタイマー SIGUSR1/SIGUSR2 : killコマンド SIGTTIN/SIGTTOU : バックグラウンドのプロセスが端末からの入力、端末からの出力を行うときに発生

snemoto-42 commented 10 months ago

・ctrl+d (EOFの入力)では既にプログラムは終了しない ・SIGTERMは無視しないように設定。クライアント側(別のターミナルなど)でkill -TERM [pid]を実行してプログラムを終了させる

snemoto-42 commented 10 months ago

シグナル周りのNGINX仕様 https://nginx.org/en/docs/control.html

snemoto-42 commented 10 months ago

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)

snemoto-42 commented 10 months ago

39

Server.cppにてSIGPIPEやEINTRを対策済み その他シグナルを管理したい場合はマージを検討

snemoto-42 commented 10 months ago

SIGPIPE/SIGHUP/SIGALRM/SIGUSR1/SIGUSR2/SIGTTIN/SIGTTOU を無視するように設定 main branchにマージ済みのためクローズ