1. 程式人生 > >linux命令kill和kill -9的區別

linux命令kill和kill -9的區別

轉載自https://www.cnblogs.com/liuhouhou/p/5400540.html

大家對kill -9 肯定非常熟悉,在工作中也經常用到。特別是你去重啟tomcat時。可是多半看來,我們對-9的理解只是表面而已。

很少有人(包括我)認真的去了解一下 kill -n 這個n到底是什麼東東。自我批評一下。

好吧。我們來好好的認識一下這個熟悉的陌生人。

1)kill

從help中可以清晰的看到 -n 指的是 訊號編號,那問題來了,“訊號編號”是哪位大神???

2)kill -l(檢視Linux/Unix的訊號變數)

這麼多呀!! 今天就單獨說一下SIGKILLSIGTERM

3)(kill pid) 、( kill -15 pid)

系統會發送一個SIGTERM的訊號給對應的程式。當程式接收到該signal後,將會發生以下的事情

  1. 程式立刻停止
  2. 當程式釋放相應資源後再停止
  3. 程式可能仍然繼續執行

      大部分程式接收到SIGTERM訊號後,會先釋放自己的資源,然後在停止。但是也有程式可以在接受到訊號量後,做一些其他的事情,並且這些事情是可以

      配置的。如果程式正在等待IO,可能就不會立馬做出相應。

  也就是說,SIGTERM多半是會被阻塞的、忽略。

4)kill  -9 pid

你不是可以不響應 SIGTERM嗎??那好,我給你下一道必殺令,我看你還不乖乖的。多半admin會用這個命令

不過,也不是所有的程式都會乖乖聽話,總有那些狀態下的程式無法立刻相應。

附錄:

linux signals

Signal NameNumberDescription
SIGHUP1Hangup (POSIX)
SIGINT2Terminal interrupt (ANSI)
SIGQUIT3Terminal quit (POSIX)
SIGILL4Illegal instruction (ANSI)
SIGTRAP5Trace trap (POSIX)
SIGIOT6IOT Trap (4.2 BSD)
SIGBUS7BUS error (4.2 BSD)
SIGFPE8Floating point exception (ANSI)
SIGKILL9Kill(can't be caught or ignored) (POSIX)
SIGUSR110User defined signal 1 (POSIX)
SIGSEGV11Invalid memory segment access (ANSI)
SIGUSR212User defined signal 2 (POSIX)
SIGPIPE13Write on a pipe with no reader, Broken pipe (POSIX)
SIGALRM14Alarm clock (POSIX)
SIGTERM15Termination (ANSI)
SIGSTKFLT16Stack fault
SIGCHLD17Child process has stopped or exited, changed (POSIX)
SIGCONT18Continue executing, if stopped (POSIX)
SIGSTOP19Stop executing(can't be caught or ignored) (POSIX)
SIGTSTP20Terminal stop signal (POSIX)
SIGTTIN21Background process trying to read, from TTY (POSIX)
SIGTTOU22Background process trying to write, to TTY (POSIX)
SIGURG23Urgent condition on socket (4.2 BSD)
SIGXCPU24CPU limit exceeded (4.2 BSD)
SIGXFSZ25File size limit exceeded (4.2 BSD)
SIGVTALRM26Virtual alarm clock (4.2 BSD)
SIGPROF27Profiling alarm clock (4.2 BSD)
SIGWINCH28Window size change (4.3 BSD, Sun)
SIGIO29I/O now possible (4.2 BSD)
SIGPWR30Power failure restart (System V)