Perl語言專家Randal Schwartz在一篇短文里這樣寫:
no no no. 不要使用kill -9.
它沒有給進程留下善后的機會:
- 關閉socket鏈接
- 清理臨時文件
- 將自己將要被銷毀的消息通知給子進程
- 重置自己的終止狀態
......
通常,應該發送15,等一兩秒鐘,如果沒效果,發送2,如果還不行,發送1。如果還不行,那你應該把那個程序刪掉,因為那個程序寫的太爛了!
不要使用kill -9。不要用收割機來修剪花盆里的花。
總之,在使用kill -9前,你應該先使用kill -15,給目標進程一個清理善后工作的機會。 進程也許無法捕捉或直接忽略SIGKILL信號,但它們可以,通常也是能夠捕捉SIGTERM信號的如果你不留機會讓進程完成清理工作,它們會留下一些不完整的文件或狀態,當系統重啟時,程序將無法理解這些狀態。
|Signal Name | Number | Description
|-
|SIGHUP | 1 | Hangup (POSIX)
|SIGINT | 2 | Terminal interrupt (ANSI)
|SIGQUIT | 3 | Terminal quit (POSIX)
|SIGILL | 4 | Illegal instruction (ANSI)
|SIGTRAP | 5 | Trace trap (POSIX)
|SIGIOT | 6 | IOT Trap (4.2 BSD)
|SIGBUS | 7 | BUS error (4.2 BSD)
|SIGFPE | 8 | Floating point exception (ANSI)
|SIGKILL | 9 | Kill(can't be caught or ignored) (POSIX)
|SIGUSR1 | 10 | User defined signal 1 (POSIX)
|SIGSEGV | 11 | Invalid memory segment access (ANSI)
|SIGUSR2 | 12 | User defined signal 2 (POSIX)
|SIGPIPE | 13 | Write on a pipe with no reader, Broken pipe (POSIX)
|SIGALRM | 14 | Alarm clock (POSIX)
|SIGTERM | 15 | Termination (ANSI)
|SIGSTKFLT | 16 | Stack fault
|SIGCHLD | 17 | Child process has stopped or exited, changed (POSIX)
|SIGCONT | 18 | Continue executing, if stopped (POSIX)
|SIGSTOP | 19 | Stop executing(can't be caught or ignored) (POSIX)
|SIGTSTP | 20 | Terminal stop signal (POSIX)
|SIGTTIN | 21 | Background process trying to read, from TTY (POSIX)
|SIGTTOU | 22 | Background process trying to write, to TTY (POSIX)
|SIGURG | 23 | Urgent condition on socket (4.2 BSD)
|SIGXCPU | 24 | CPU limit exceeded (4.2 BSD)
|SIGXFSZ | 25 | File size limit exceeded (4.2 BSD)
|SIGVTALRM | 26 | Virtual alarm clock (4.2 BSD)
|SIGPROF | 27 | Profiling alarm clock (4.2 BSD)
|SIGWINCH | 28 | Window size change (4.3 BSD, Sun)
|SIGIO | 29 | I/O now possible (4.2 BSD)
|SIGPWR | 30 | Power failure restart (System V)
原文地址:http://unix.stackexchange.com/questions/8916/when-should-i-not-kill-9-a-process