进程间通信笔记(二)

信号

信号是由内核产生并发送的,

信号可以用于进程和进程之间通信,也可以用于内核和进程间的通信。

虽然我们用的最多的是用信号杀死进程。但实际上我们我们可以捕捉信号做特定处理。

特点

  • 简单
  • 携带的信息量少
  • 使用在某个特定的场景中

信号的状态

  • 产生
    • 键盘:ctrl +c
    • 命令:kill
    • 系统函数:kill
    • 软条件:定时器
    • 硬件:段错误,除0错误
  • 未决状态-没有被处理
    • 等待被处理
  • 递达- 信号被处理了
    • 忽略
    • 捕捉(我们需要做的是捕捉信号并做用户自定义操作)
    • 执行了默认动作
    • SIGKILL和SIGSTOP是不能够被捕捉,不能够被阻塞和忽略的。

利用信号通信的问题

信号优先级比较高,进程收到信号之后,暂停正在处理的工作,优先处理信号,处理完成之后再继续暂停的工作。

会导致有些时候代码执行到一半,来了信号,中止去做处理,处理的过程中对数据的操作影响到一开始中止的代码逻辑,设计代码时非常麻烦。

如果使用信号做进程间通信,可能产生的问题和情境比较多,不建议使用信号做进程间通信。

阻塞信号集,未决信号集

是在pcb里,即内核里,我们不能直接操作的。

  • 阻塞信号集:
    • 要屏蔽的信号,即放到未决信号集中
  • 未决信号集
    • 没有被处理信号的集合

信号相关的函数

  • kill :发送信号给指定进程
    • int kill(pid_t pid,int sig);
    • shell 命令 kill -l 可以参考所有信号宏

本文标题:进程间通信笔记(二)

文章作者:Yang Shuai

发布时间:2019年03月12日 - 17:03

最后更新:2019年03月12日 - 17:03

原始链接:https://ysbbswork.github.io/2019/03/12/进程间通信笔记(二)/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!