暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Linux系统中的kill -9和-15有什么区别?

1814

昨天推送了这篇文章Linux系统中的kill -0有什么作用?,立刻有朋友就反馈说介绍下kill -15。

kill指令能接收很多的参数,其中-n signum,就是信号编号,

[oracle@bisal ~]$ kill
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]

通过-l,可以看到kill能用的所有信号编号, P.S. 注意到没有0这个编号。

[oracle@bisal ~]$ 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

编号9是SIGKILL,编号15是SIGTERM,这俩有什么区别?

如果说相同点,他们都是让指定的进程终止运行。

不同的就是,给SIGTERM信号的进程可能停不下来,给SIGKILL信号的进程会立即停止。

接收SIGTERM信号,可能会发生以下几种情况的一种:

  1. 当前程序立刻停止。
  2. 程序释放相应资源,然后再停止。
  3. 程序可能仍然继续运行。

大部分程序会先释放自己的资源,然后再停止。但是也有程序可以在接受到信号量后,继续做其他一些事情,并且这些事情是可以配置的。如果程序正在等待IO,可能就不会立马做出响应。换句话说,SIGTERM信号是可以被阻塞、处理、或忽略的,他要求程序正常进行退出。

而SIGKILL信号正好相反,他不会被阻塞、处理、或忽略,程序立即退出。

了解Oracle的朋友,可能会做下类比,SIGKILL就像shutdown abort,要求立刻关闭数据库,不会等当前会话的结束,或活动事务回滚,重启数据库时需要进行实例恢复。SIGTERM就像shutdown immediate/transactional/normal,让会话或者活动事务执行完成再关闭。

SIGKILL,粗鲁地停止,SIGTERM,优雅地停止。这两个适用于不同的场景,讲道理,无论是手工执行,还是在程序中,应该先使用SIGTERM,让程序正常退出,避免有些资源或者文件未正确清理,影响下次执行,如果SIGTERM还终止不了,就使用SIGKILL信号。

近期更新的文章:

SpringBoot开发过程中碰到的几个问题

见识一下SQL Server隐式转换处理的不同

小白学习MySQL - 查询会锁表?

误操作怎么办?试试这个神器-Log Miner

数据库hang等待链分析利器


文章分类和索引:

公众号700篇文章分类和索引

文章转载自bisal的个人杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论