Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18390
  • 博文数量: 7
  • 博客积分: 300
  • 博客等级: 二等列兵
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-02 21:27
文章分类
文章存档

2010年(7)

我的朋友
最近访客

分类: LINUX

2010-05-26 20:12:13

 

信号状态:
    信号的未决是一种状态,指的是从信号的产生到信号被处理前的这一段时间;

    信号的阻塞是一个开关动作,指的是阻止信号被处理,但不是阻止信号产生。
    APUE例题在sleep前用sigprocmask阻塞了退出信号,然后sleep,然后在sleep的过程中产生一个退出信号,但是此时退出信号被阻塞过,(中文的阻塞在这里容易被误解为一种状态,实际上是一种类似于开关的动作,所以说被阻塞过,而不是被阻塞)所以处于未决状态,在 sleep后又用sigprocmask关掉退出信号的阻塞开关,因为之前产生的退出信号一直处于未决状态,当关上阻塞开关后,马上退出未决状态,得到处理,这一切发生在sigprocmask返回之前。

 

总结:信号被阻塞并不是被丢弃,只是没有被处理。这种状态叫未决状态。

      解除阻塞后,处于“未决状态”的信号会继续被处理。

      解除阻塞要调用sigprocmask,但在sigprocmask返回之前,解决阻塞动作就已经完毕。

        所在在解除阻塞的函数sigprocmask返回之前,就要进行未决信号的处理了。

 

int sigpend(sigset_t *set);---获取未决的信号.

int sigprocmask(int how,const sigset_t *set,sigset_t *oset);

      ----根据how的值来决是完成的动作,阻塞、解除阻塞等.

 

注意:未决信号中不可能有相同的。如果信号产生

 

了一次且未决,又产生一次时会被丢弃。   

        当然如果是实时信号,就另当别论了。因为实时信号可以多个相同的未决信号的。

 

 

 

 

 

参考:     http://blog.csdn.net/sunyubo458/archive/2009/08/25/4484957.aspx

阅读(405) | 评论(0) | 转发(0) |
0

上一篇:linux终端

下一篇:虚拟内存与虚拟存储

给主人留下些什么吧!~~