信号

一、信号的作用
     使用信号的目的是:
  •  让进程知道已经发生了一个特定的事件
  • 强迫进程执行它自己代码中的信号处理程序
     常规信号1-31
     实时信号32-64
     内核区分内核信号传递的两个不同的阶段:
     信号产生、信号传递
     每个被产生的信号至多被传递一次。信号是可消费资源。
1、传递信号时所执行的操作
     SIGKILL和SIGSTOP信号不可以被显示地忽略、捕捉或阻塞,必须执行他们缺省的操作。
2、POSIX信号和多线程应用
3、与信号相关的数据结构



     typedef struct {
          unsigned long sig[2];
     } sigset_t;
(1)信号描述符和信号处理程序描述符
(2)sigaction数据结构
(3)挂起信号队列
4、在信号数据结构上的操作
二、产生信号
1、specific_send_sig_info()函数
2、send_signal()函数:该函数想指定进程发送信号
3、group_send_sig_info()函数
三、传递信号
     为了处理非阻塞的挂起信号,内核调用do_signal()函数。
1、执行信号的缺省操作
2、捕获信号
(1)建立帧
(2)检查信号标志
(3)开始执行信号处理程序
(4)终止信号处理程序
3、系统调用的重新执行
(1)重新执行被未捕获信号中断的系统调用
(2)为所捕获的信号重新执行系统调用
四、与信号处理相关的系统调用
     C库中封装函数sigaction()调用sys_rt_sigaction()而不是sys_action()。
(1)kill()系统调用:相应的服务例程是:sys_kill()→ kill_something_info()→kill_proc_info()
(2)tkill()和tgkill()系统调用
     tkill()→sys_tkill()
     tgkill()→sys_tgkill()
(3)改变信号的操作
     sigaction()→sys_sigaction()
(4)检查挂起的阻塞信号
     sigpending()→sys_sigpending()
(5)修改阻塞信号的集合
     sigprocmask()→sys_sigprocmask()→copy_from_user()
(6)挂起进程
     sigsuspend()→sys_sigsuspend()
(7)实时信号的系统调用
     rt_sigaction( ), rt_sigpending( ), rt_sigprocmask( ), and rt_sigsuspend( )
     rt_sigqueueinfo()
     rt_sigtimedwait()一般通过sigwaitinfo()和sigtimedwait()调用rt_sigtimedwait()。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值