验证 NanoMQ stop slow 的问题
- daemon 和非 daemon 两种方式 docker stop 都很慢
疑问是默认情况下,SIGTERM 会被处理。
- 模拟 docker 内发送 SIGTERM 信号
# The default signal for kill is TERM
# pkill will send the specified signal (by default SIGTERM) to each
# process instead of listing them on stdout.
$ kill pid
$ pkill program
docker 内收不到信号。
查到资料显示:pid 为 1 的进程的 sigterm 默认被屏蔽了,除非手动捕获该信号。于是,在程序处理中手动捕获该信号,问题解决。
pid 1 is special on Linux, it is unkillable, meaning that signals that would normally terminate a process if it has no handler installed do not terminate it. In other words, pid 1 must handle SIGTERM explicitely for the usual scemantics to apply. I keep rediscovering this with containers...
raby.sh - SIGTERM and PID 1: Why does a container linger after receiving a SIGTERM.
这部分也有解释:
Dockerfile reference | Docker Docs