信号

信号的特点是简单、携带的信息量少,且使用在某个特定的场景中。信号有产生、未决以及递达三种状态。

1.信号相关的函数:

  •  kill ---发送信号给指定的进程
  • raise----给自己发送信号

         函数原型: int raise(int sig);

  • abort---给自己发送异常终止信号 

        函数原型 :void abort(void);  没有返回值,永远不会调用失败

  • 闹钟(定时器)

         alarm---设置定时器(每个进程只有一个定时器)

              函数原型:unsigned int alarm(unsigned int seconds); 参数为秒,当时间到达之后,函数发出一个SIGALRM信号。

  

 

2.相关函数示例

kill函数原型  int kill(pid_t pid,int sig);第一个参数表示给哪个pid发信号,第二个表示发什么信号。成功返回值为0,失败返回值为-1。其中,信号的类型有:

alarm:表示定时几秒然后触发信号:

setitimer表示实现周期性定时

主要就是设置itimerval结构体,设置第一次触发的时间,以及循环的时间。

3.信号集

前面说了信号有三种状态,处于未决状态的信号则存放在未决信号集中,处于阻塞状态的信号则存放在阻塞集中。

         

    前面kill函数中,展示了信号的类型,每个信号前面都有一个标号与之对应,该标号也是该信号在信号集中的地址,如果在未决信号集中的值为1,则表示信号处于未决状态,为0表示递达状态,阻塞集也是一样。

   由于未决信号集与阻塞信号集在内核pcb中,内核是不能操作的,只有用户区可以修改的,所以内核提供了一系列的接口函数,先自定义一个自定义信号集,结构与阻塞信号集是一样的,先把自定义信号集修改好,然后利用借口函数赋值给阻塞信号集。

4.信号捕捉

给一个sigaction示例:

在信号处理过程中,才会临时对ctrl+alt+\屏蔽,信号处理完以后(打印wake up),就不屏蔽了,程序就终止了。

最后,再给两个利用定时器加信号捕捉实现的定时打印功能:


这里的函数跟上面的功能差不多,定时器信号捕捉以后,再定义一个定时器。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值