lxyfirst

C++博客 首页 新随笔 联系 聚合 管理
  33 Posts :: 3 Stories :: 27 Comments :: 0 Trackbacks
1.信号的概念,信号是进程收到某些事件发生的通知机制,也被称为软中断。
信号的产生:信号一般有kernel产生,也可以由进程通过一些系统调用产生,如kill,abort,alrm,raise等。
信号的投递(delivery): kernel会将产生的信号尽快投递给相应进程(进程运行时或下一次被调度时),是异步过程,在产生之后,投递到进程之前的这段时间处于未决状态(pending)。
信号的阻塞(block):进程可以阻塞一些信号的投递,以防中断代码的执行,每个进程/线程有各自的阻塞信号掩码。阻塞状态中产生的相应信号处于未决状态(pending),直到进程解除阻塞时才被投递,相关调用如sigprocmask,pthread_sigmask , sigpending 。
信号的忽略(ignore):信号投递到进程后,调用相应信号处理程序,分为三种处理情况:默认:系统默认处理,忽略:不处理,自定义:调用自定义handler 。相关调用如signal,sigaction 。

2.信号分为实时信号和非实时信号,老的unix信号都是非实时信号,不排队(同时触发多个相同信号只有1次通知)。 新的SIGRTMIN~SIGRTMAX的信号是实时信号,排队。
3.带参数的信号处理
    在使用sigaction注册信号时,如果指定了SA_SIGINFO,则系统回调void (*sa_sigaction)(int, siginfo_t *, void *)进行信号处理,siginfo_t会被传送给处理函数,可以在其中的si_value中指定传递的数据。
    在发送信号时使用sigqueue,可以指定sigval,其中包含了需要传递的数据。
4.信号处理函数是不可重入的,所以一般只会在函数中设置一些flag,有用户程序异步处理,比如退出信号TERM的处理。
posted on 2010-04-29 17:59 star 阅读(170) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理