linux信号量

文章来源:编程思想博客

信号量

信号名称 编号 能否屏蔽 默认动作 俗称
SIGINT 2 YES 进程自己退出 自杀
SIGTERM 15 YES 进程自己退出 自杀
SIGQUIT 3 YES 执行 core dump 进程自己退出 自杀
SIGKILL 9 NO 进程被内核干掉 它杀

对比杀进程的几个信号:SIGINT、SIGTERM、SIGQUIT、SIGKILL

  1. SIGINT ==> 在大部分 POSIX 系统的各种终端上,Ctrl + C 组合键触发的就是这个信号。
  2. SIGTERM ==> 它是 kill & killall 这两个命令【默认】使用的信号。
    3. SIGQUIT ==> 这个信号类似于前两个(SIGINT & SIGTERM),差别在于——进程在退出前会执行“core dump”操作。
  3. SIGKILL ==> 前面三个信号都是【可屏蔽】,而这个信号是【不可屏蔽】。 当某个进程收到了【SIGKILL】信号,该进程自己【完全没有】处理信号的机会,而是由操作系统内核直接把这个进程干掉。

暂停进程

刚才聊“杀进程”的时候提到了“自杀 VS 它杀”。前者比较“温柔”;而后者比较“粗暴”。
对于暂停进程,也有“温柔 & 野蛮”两种玩法。而且也是用 kill 命令发信号。

【温柔】式暂停(SIGTSTP)

kill -TSTP 进程编号

这个【SIGTSTP】信号类似前面提及的【SIGINT】——
1. 两者默认都绑定到组合键(【SIGINT】默认绑定到组合键【Ctrl + C】;【SIGTSTP】默认绑定到组合键【Ctrl + Z】)
2. 这两个快捷键都是由【终端】截获,并发出相应的信号(具体原理参见本章节的某个小节)
3. 两者都是【可】屏蔽的信号。也就是说,如果某个进程屏蔽了【SIGTSTP】信号,你就【无法】用该方式暂停它。这时候你就得改用【粗暴】的方式(如下)。

【粗暴】式暂停(SIGSTOP)

kill -STOP 进程编号

这个【SIGSTOP】信号与前面提及的【SIGKILL】有某种相同之处——这两个信号都属于【不可屏蔽】的信号。也就是说,收到【SIGSTOP】信号的进程【无法】抗拒被暂停(suspend)的命运。
与“杀进程”的风格类似——当你想要暂停某进程,应该先尝试“温柔”的方法,搞不定再用“粗暴”的方法

恢复进程

kill -CONT 进程编号

重新恢复(resume)被暂停的进程,该命令发送信号【SIGCONT】

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.