[实践OK]Linux SIGTERM 捕获

jackxiang 2023-5-18 16:11 | |
背景:容器中用docker stop  4d393592c6ec ,sameersbn/redmine:5.0.5 的容器会产生如下日志,docker logs 4d393592c6e  #docker stop 4d393592c6ec  会触发下面的退出,而不是臆想的主动退出了,是手工执行出现docker 退出。

2023-05-18 07:52:16,943 WARN received SIGTERM indicating exit request
2023-05-18 07:52:16,943 INFO waiting for unicorn, cron, nginx to die
2023-05-18 07:52:16,945 INFO stopped: nginx (exit status 0)
2023-05-18 07:52:16,946 INFO stopped: cron (terminated by SIGTERM)
2023-05-18 07:52:17,947 INFO stopped: unicorn (exit status 0)

是一个SIGTERM信号,kill -l 发现15) SIGTERM,编号15,才知道是我自己停止的,而不是长时间运行出现自动退出。这个很重要,因为容器的稳定性相当重要。
下面就以这段C代码进行模拟容器的退出并发SIGTERM信号,如下:
test.c


send.c 用于发送SIGTERM 信号给test


SIGTERM : 程序结束信号,与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出。Shell命令kill 默认产生这个信号。
gcc  test.c -o test
gcc  send.c -o send
运行程序:
./test

./send 12345  //12345是test的pid



终端下输入:
kill 12345
也会给test发送SIGTERM 信号。
or kill -15 12345
kill -SIGTERM 12345



来自:https://blog.csdn.net/a379039233/article/details/80715461
More signal:
#kill -l
1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/11835/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]