redis sigterm 信號

        這是今天在測試Redis3.0.0集羣的時候偶然遇到的狀況。在中止Redis服務時,我分別用了pkill redis-server和kill -9 redis-pid的方式中止Redis服務,但Redis的日誌輸出卻不同。redis

        使用pkill中止Redis時,輸入的日誌以下。說明Redis是正常退出的。
shell

16017:signal-handler (1423639887) Received SIGTERM scheduling shutdown...
16017:M 10 Feb 23:31:27.163 # User requested shutdown...
16017:M 10 Feb 23:31:27.164 * Calling fsync() on the AOF file.
16017:M 10 Feb 23:31:27.164 * Saving the final RDB snapshot before exiting.
16017:M 10 Feb 23:31:27.213 * DB saved on disk
16017:M 10 Feb 23:31:27.213 # Redis is now ready to exit, bye bye...


        而使用kill -9中止Redis時,Redis沒有任何日誌輸出,說明用kill命令中止Redis服務是不對的。session


        從上面的日誌也能夠看出,若是要Redis正常退出,須要給Redis發出一個SIGTERM信號。而pkill是將含有參數的全部進程kill掉,若是要kill單個進程,而且發出SIGTERM命令可不能夠呢?答案是能夠的,經過kill -15 redis-pid。
測試


        如今總結一下,若是要正常中止Redis服務,能夠經過pkill命令中止全部Redis服務或者使用kill -15 redis-pid中止某一個Redis服務。
spa


下面順便說一下pkill和kill。
日誌

pkill:經過名稱和其它屬性查找或者發信號給進程。
code

kill:能夠經過kill -l命令查看到kill有64個參數,經常使用的5個以下:
orm

  • 1) SIGHUP:本信號在用戶終端鏈接(正常或非正常)結束時發出, 一般是在終端的控制進程結束時, 通知同一session內的各個做業, 這時它們與控制終端再也不關聯。server

  • 2) SIGINT:程序終止(interrupt)信號, 在用戶鍵入INTR字符(一般是Ctrl-C)時發出,用於通知前臺進程組終止進程。進程

  • 3) SIGQUIT:和SIGINT相似, 但由QUIT字符(一般是Ctrl-\)來控制. 進程在因收到SIGQUIT退出時會產生core文件, 在這個意義上相似於一個程序錯誤信號。

  • 9) SIGKILL:用來當即結束程序的運行. 本信號不能被阻塞、處理和忽略。若是管理員發現某個進程終止不了,可嘗試發送這個信號。

  • 15) SIGTERM:程序結束(terminate)信號, 與SIGKILL不一樣的是該信號能夠被阻塞和處理。一般用來要求程序本身正常退出,shell命令kill缺省產生這個信號。若是進程終止不了,咱們纔會嘗試SIGKILL。

相關文章
相關標籤/搜索