Unixã·ã°ãã«ã®ä»çµã¿ â ããã»ã¹ãžã®ãåå³ããçè§£ãã
Unixã®ãã·ã°ãã«ãã£ãŠäœãªã®ïŒ ããã»ã¹ã«ä¿¡å·ãéãã£ãŠããšïŒ
ãã®ãšããïŒ ã·ã°ãã«ã¯ã«ãŒãã«ããããã»ã¹ã«éãããããœãããŠã§ã¢å²ã蟌ã¿ãã ããããšãã°ãããããçµäºããŠãããšããèšå®ãã¡ã€ã«ãèªã¿çŽããŠãã¿ãããªåå³ãããã»ã¹ã«äŒããä»çµã¿ã ããé»è©±ã®çä¿¡é³ã¿ãããªãã®ã§ãããã»ã¹ã¯ä»ãã£ãŠããåŠçãäžæäžæããŠã·ã°ãã«ã«å¯Ÿå¿ãããã ã
ã·ã°ãã«ã£ãŠããããªçš®é¡ãããã®ïŒ
代衚çãªãã®ã玹ä»ããããSIGTERMã¯ããè¡åããçµäºããŠãããSIGKILLã¯ãåçç¡çšã§åŒ·å¶çµäºããSIGINTã¯ããŠãŒã¶ãŒãäžæãèŠæ±ããããïŒCtrl+Cã§éãããïŒãSIGHUPã¯ã端æ«ãåæããããããSIGUSR1ãšSIGUSR2ã¯ãã¢ããªãèªç±ã«äœ¿ã£ãŠããæ±çšã·ã°ãã«ãã ããçªå·ã§èšããšSIGTERMã15ãSIGKILLã9ãSIGINTã2ã ãã
ã·ã°ãã«ã£ãŠã©ããã£ãŠããã»ã¹ã«å±ãã®ïŒ
ãŸãkillã³ãã³ããkillã·ã¹ãã ã³ãŒã«ã§ãPIDââã«ã·ã°ãã«â³â³ãéã£ãŠããšã«ãŒãã«ã«äŸé Œããããã«ãŒãã«ã¯ãã®ããã»ã¹ã®æ å ±ã«ãä¿çã·ã°ãã«ããšããŠããŒã¯ãããã ãããã»ã¹ãã«ãŒãã«ãããŠãŒã¶ãŒç©ºéã«æ»ãã¿ã€ãã³ã°ïŒã·ã¹ãã ã³ãŒã«ã®æ»ããã¿ã€ããŒå²ã蟌ã¿ã®åŸïŒã§ã·ã°ãã«ãé éãããŠãç»é²ãããã·ã°ãã«ãã³ãã©ãåŒã°ãããã
ã·ã°ãã«ãã³ãã©ã£ãŠèªåã§æžããã®ïŒ
æžãããïŒ CãªãsigactionãSignal颿°ãNode.jsãªãprocess.on('SIGTERM', ...)ãPythonãªãsignal.signalã¢ãžã¥ãŒã«ã§ç»é²ãããã ããã³ãã©ãç»é²ããªãã£ãå Žåã¯ããã©ã«ãåäœãå®è¡ããããSIGTERMãSIGINTã®ããã©ã«ãã¯ãããã»ã¹çµäºãã ãã
ã°ã¬ãŒã¹ãã«ã·ã£ããããŠã³ã£ãŠã·ã°ãã«ãšé¢ä¿ããã®ïŒ
ãŸãã«ã·ã°ãã«ã®æŽ»çšäŸã ããWebãµãŒããŒãäŸã«ãããšãSIGTERMãåãåã£ãããæ°ãããªã¯ãšã¹ãã®åä»ãæ¢ãã â åŠçäžã®ãªã¯ãšã¹ããå®äºããã â DBæ¥ç¶ãã¯ãªãŒã³ã«éãã â çµäºã³ãŒã0ã§çµäºããšããæµãã ãããããªã黿ºãæãããããªããŠãã¡ãããšçä»ããŠããé宀ããã€ã¡ãŒãžã ãã
Dockerã³ã³ããã ãšã·ã°ãã«ã®æ±ããéãã£ãŠèãããã©æ¬åœãªã®ïŒ
ãããšããã«æ°ã¥ããããã³ã³ããå ã®æåã®ããã»ã¹ã¯PID 1ã«ãªããã ãã©ãLinuxã«ãŒãã«ã®ä»æ§ã§PID 1ã¯ã·ã°ãã«ãã³ãã©ãæç€ºçã«ç»é²ããŠããªãã·ã°ãã«ãç¡èŠãããã ãã€ãŸãdocker stopã§SIGTERMãéãããŠããã¢ããªããã³ãã©ãç»é²ããŠããªããã°äœãèµ·ããªãã10ç§åŸã«SIGKILLã§åŒ·å¶çµäºãããŠããŸããã
ããããã°ã¬ãŒã¹ãã«ã·ã£ããããŠã³ã§ããªããããïŒ ã©ãããã°ããã®ïŒ
tiniãdumb-initãšãã軜éinitããã»ã¹ãPID 1ãšããŠèµ·åããŠãã¢ããªããã®åããã»ã¹ã«ããæ¹æ³ãããããDockerèªäœã«ã--initãªãã·ã§ã³ããããã ãããã§ã·ã°ãã«ãæ£ããã¢ããªã«è»¢éãããããã«ãªããã
SIGKILLã¯çµ¶å¯Ÿã«ãã£ããã§ããªãã£ãŠæ¬åœãªã®ïŒ
æ¬åœã ããSIGKILLãšSIGSTOPã ãã¯ãã³ãã©ãç»é²ã§ããªããããããã¯ããã¹ã¯ãã§ããªããã«ãŒãã«ãçŽæ¥ããã»ã¹ãçµäºããããããã ããkill -9ïŒSIGKILLïŒã¯ãæåŸã®ææ®µããªãã ãSIGKILLã ãšãã¡ã€ã«ã®æžããããDBæ¥ç¶ãäžéå端ãªç¶æ ã§æ®ãå¯èœæ§ãããããããŸãSIGTERMãéã£ãŠãããã§ããã¡ãªãšãã ãSIGKILLã䜿ãã®ããã¹ããã©ã¯ãã£ã¹ã ãã
ã·ã°ãã«ãã³ãã©ã®äžã§ãã£ã¡ããããªãããšã£ãŠããã®ïŒ
ããã¯ããã©ã³ã§ãèžã¿ãã¡ãªçœ ã ããã·ã°ãã«ãã³ãã©å ã§åŒãã§ããã®ã¯ãasync-signal-safeããªé¢æ°ã ããªãã ãmallocãprintfã¯async-signal-safeãããªãããããã³ãã©å ã§åŒã¶ãšãããããã¯ãã¡ã¢ãªç Žå£ãèµ·ããããå®å šãªæ¹æ³ã¯ããã³ãã©å ã§ã¯ãã©ã°å€æ°ãã»ããããã ãã«ããŠãã¡ã€ã³ã«ãŒãã§ãã®ãã©ã°ããã§ãã¯ããŠåŸåŠçãããself-pipe trickããã¿ãŒã³ã ãã
systemdãã·ã°ãã«ã䜿ã£ãŠãµãŒãã¹ã管çããŠãã®ïŒ
ããã ããsystemctl stopãå®è¡ãããšsystemdã¯ãŸãExecStopã§æå®ãããã³ãã³ããå®è¡ãããªããã°SIGTERMãéããTimeoutStopSecã§æå®ãããç§æ°åŸ ã£ãŠãçµäºããªããã°SIGKILLãéããã ãKillSignalãã£ã¬ã¯ãã£ãã§SIGTERM以å€ã®ã·ã°ãã«ãæå®ããããšãã§ããããããšãã°nginxã®ããã«SIGQUITã§ã°ã¬ãŒã¹ãã«ã·ã£ããããŠã³ãããµãŒãã¹ã§ã¯ãKillSignal=SIGQUITãšèšå®ããã®ãå®ç³ã ãã