SIGKILL是常見的Linux信號(hào),我們使用kill
命令殺掉進(jìn)程也就是像進(jìn)程發(fā)送SIGKILL信號(hào)。
和其他信號(hào)不同,SIGKILL和SIGSTOP是不可被Catch的,因此下面的代碼是能編譯通過但也是無效的,更多細(xì)節(jié)可以參考golang/go#9463.
c := make(chan os.Signal, 1)
signal.Notify(c, syscall.SIGKILL, syscall.SIGSTOP)
這是Linux內(nèi)核的限制,這種限制也是為了讓操作系統(tǒng)有可能控制進(jìn)程的生命周期,理解后我們也不應(yīng)該去嘗試捕獲SIGKILL。
不過還是有人這樣去做,最后結(jié)果也不符合預(yù)期,這需要我們對(duì)底層有足夠的理解。