【Chapter10*重点总结*】信号基本解读以及父子进程同步应用(应用未解决)

写在前面
在刚接触信号时,感觉是:由于信号是异步事件,无法控制何时会发生,所以早期的信号存在是否可重入的问题:异步信号安全。详细的,有可能信号发生时,进程正常执行的指令被中断。对于一些指令,如malloc分配存储空间时,malloc会为存储区维护一个链表,此时信号发生,进入到信号处理程序,再返回,有可能链表已被修改,分配存储空间出错,所以有些函数是不可重入的
早期的信号有时是不可靠的,比如使用一个标志判断信号是否发生,一直循环判断这个标志,直到信号处理程序更改。但在判断之后,很有可能此时信号发生,而进程更改标志后,主程序已经在判断语句之后。从这种意义上说,刚发生的信号就丢失了。
这是早期信号的弊端,在刚接触时,感觉这里一头雾水,摸不到头脑。前面基本上是信号的发展史以及改进。等读到后面的时候就是真正的信号应用,所以,不要被目前的小困难打倒~以下是正题

一、信号的基本术语

信号是软件中断,是一种典型的异步事件处理。信号都是正整数,没有编号为0的信号。以下是信号的基本术语。

产生:当造成信号的事件发生时,此时为进程产生一个信号。

产生信号事件:硬件异常(如除以0)、软件条件(如alarm定时器超时)、终端产生的信号、调用kill函数

递送:当进程对信号处理时,即为向进程递送了一个信号。一般处理方式有3种:忽略此信号、捕捉信号(调用用户函数)、系统默认动作

未决:在信号产生和进程处理之间,一直是未决的。

阻塞:是指递送时阻塞,信号被产生之后,不能及时递送给进程,一直处于未决状态,直到进程解除该信号的阻塞,或者将该信号动作更改为默认。当一个信号被递送时,即进入信号处理程序,系统自动将该信号加入屏蔽字,防止在此期间,后产生相同的信号重新进入信号处理程序。

信号排队:当信号被阻塞时,有可能发生了多个信号。解除阻塞后,POSIX允许系统递送该信号一次或多次。如果递送多次,则称为信号排队。除了信号实施扩展,大部分UNIX不对信号排队,只递送一次信号。

递送顺序:如果有多个信号发送给进程?那怎么确定信号递送顺序呢?POSIX并没有规定,建议优先递送与进程当前状态有关的信号,如SIGSEGV。

信号屏蔽字:每个进程都有一个信号屏蔽字,规定当前要阻塞递送给该进程的信号集。对于每一个可能的信号,屏蔽字有一位与其对应。当对应位设置,表明该信号被屏蔽。

信号集:表示多个信号的数据类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值