Unixã·ã°ãã«ã®ä»çµã¿ â ãçµãã£ãŠããã®åå³ãšåŸçä»ã
ãé¡ãããŠçµããã匷å¶çã«çµãã
ãŸãã¯ãèªåãžåå³ãéã£ãŠã¿ã
Python 3ã䜿ãããªããsignal-demo.pyãžä¿åããpython signal-demo.pyã§è©ŠããŸããä»ã®ããã»ã¹ãžåæ¢åœä»€ãéãå®éšã§ã¯ãããŸããã
import signal
stopping = False
def request_stop(signum, frame):
global stopping
stopping = True
signal.signal(signal.SIGINT, request_stop)
print("äœæ¥ãéå§")
signal.raise_signal(signal.SIGINT)
if stopping:
print("åå³ãåããŠãçä»ã")
print("çµäº")
äœæ¥ãéå§
åå³ãåããŠãçä»ã
çµäº
ãã³ãã©ã§ã¯ãã©ã°ãå€ããæ®éã®åŠçã§è¡šç€ºããŸããããã¯çãä»çµã¿ã®ç·Žç¿ã§ãå®éã®ãµãŒããŒãåŠçäžã®èŠæ±ãåŸ ã€å®è£ ã¯å¥ã«å¿ èŠã§ããPythonã®ãã³ãã©ã¯ãäœæ°Žæºã®Cãã³ãã©å ã§ãã®ãŸãŸå®è¡ããããéåžžã¡ã€ã³ã¹ã¬ããã§åŸããå®è¡ãããŸãã
3ã€ã®åå³ãåãã
| åå³ | Unixã§ã®äž»ãªåœ¹å² |
|---|---|
| SIGINT | 端æ«çããã®äžæèŠæ± |
| SIGTERM | çµäºèŠæ±ããã³ãã©ã§å¯Ÿå¿ã§ãã |
| SIGKILL | 匷å¶çµäºãææã»ç¡èŠã»ãããã¯ã¯ã§ããªã |
SIGHUPãèšå®åèªèŸŒã«äœ¿ãã®ã¯ããã®ã¢ããªãããå®è£ ããå Žåã§ããåå³ã®ååã ãã§èšå®ãã¡ã€ã«ãèªåçã«èªã¿çŽãããããã§ã¯ãããŸããããŸããæšæºã·ã°ãã«ã¯ãä¿çäžã«åãçš®é¡ãäœåéã£ãŠãããã®åæ°ãã¹ãŠããã¥ãŒã«æ®ããšã¯éããŸããã
çµäºåŠçã¯ãã¢ããªãçšæãã
WebãµãŒããŒãªããæ°èŠåä»ãæ¢ããåŠçäžã®èŠæ±ã®å®äºãæã¡åããæ±ºããä¿åãæ¥ç¶çµäºãè¡ããŸããå€éšã®åæ¢æéããé·ãåŸ ã¡ç¶ãããšãåŸçä»ãã®éäžã§åŒ·å¶çµäºãããããšããããŸããSIGKILLã§æ¢ãŸã£ãŠããä»ã®ããã»ã¹ãDBãç¶æ ãæã¡ç¶ããå Žåãèããåéãå詊è¡ãèšèšããŸãã
Cã®éåæãã³ãã©ã§ã¯ãprintfãmallocçãèªç±ã«åŒã¹ãŸãããvolatile sig_atomic_tã®ãã©ã°ãå€ãã工倫ãšããã€ãçã§éåžžã®ã€ãã³ãã«ãŒããžç¥ãããself-pipeã¯åºå¥ããŸããããPythonã»Node.jsçã§ã¯ã©ã³ã¿ã€ã ã®ãã³ãã©å®è¡æ¡ä»¶ãèªã¿ãŸãã
ããå°ã詳ããïŒã³ã³ããã®åæ¢
Docker stopã®æåã®ã·ã°ãã«ã¯STOPSIGNALçã§å€ãããåŸ ã¡æéã倿Žã§ããŸããæç€ºãããªããšãã®æ¢å®ã¯Linuxã³ã³ããã§10ç§ãWindowsã³ã³ããã§30ç§ã§ããå šã³ã³ãããžåºå®ãã10ç§ãåœãŠã¯ããŸããã
Linuxã®PID 1ã«ã¯ç¹å¥ãªã·ã°ãã«ã®æ±ãããããŸããã·ã§ã«ãå
¥å£ã«ããŠåã®ã¢ããªãžåå³ãäŒãããªãããšããããããexec圢åŒã§èµ·åããæ¹æ³ã--initçãæ€èšããŸããinitãå
¥ãããåŸçä»ããèªåã§å®æããããã§ã¯ãªããã¢ããªåŽã®çµäºæé ãå¿
èŠã§ãã
ð§ ãã³ã®ã³å çã®ãŸãšãïŒãã·ã°ãã«ãã£ãŠåºãŠããããåããŠããããã°ã©ã ãžéããçãåå³ããšæãã°ã ãããOKïŒ
ããã°ã©ã ã®å®è¡åäœã¯OSã®ä»çµã¿ãã³ã³ããã®èµ·åã¯Dockerå ¥éã§åŠã¹ãŸãã
åèè³æ
- Linux man-pagesïŒsignal(7) â æ¢å®åäœã»SIGKILLã»é éãšä¿ç
- PythonïŒsignal â raise_signalã»ã¡ã€ã³ã¹ã¬ããã»å®è¡ã¢ãã«ãšWindows
- Linux man-pagesïŒsignal-safety(7) â Cã®éåæãã³ãã©ã®å®å šãªæäœ
- DockerïŒcontainer stop â 忢ã·ã°ãã«ãšåŸ ã¡æéã®æ¡ä»¶
- DockerïŒDockerfile ENTRYPOINT â ã·ã§ã«åœ¢åŒãšexecã»PID 1ãžã®äŒé