pause函数的使用及signal函数的返回值

signal函数

在这里插入图片描述

该函数主要是用来捕获一个指定信号的。

例如:

在这里插入图片描述

这个还是比较容易理解的,主要是返回值部分,成功返回最近一次调用该函数时的第二个参数的值是什么意思呢?

看图:

1、只调用一次signal函数时:

注意:返回值的类型需要自己定义或者声明相关的宏

在这里插入图片描述

此时得到的返回值sig_ret为NULL,与该函数的第二个参数func没有半毛钱关系

2、调用两次signal函数,不过捕获的信号不一样

在这里插入图片描述

此时得到的返回值与func还是没关系。

3、调用两次signal函数,并且捕获相同的信号

在这里插入图片描述

这次的输出结果中,第二次输出的返回值与func相同;

结论

1)如果想使用signal函数的返回值来获取上一次调用signal的任务函数指针,那么需要至少调用两次signal才行。

2)同时每次预设值的信号值要一致才能获取上一次的任务中断函数指针

pause函数

在这里插入图片描述

1、该函数主要用来挂起一个进程,直到收到一个相关的信号,在执行信号指定的动作。

例如:

在这里插入图片描述

如上图所示,函数挂起后就会处于阻塞状态,程序停止运行,另开一个终端,发送信号34给系统将接触进程的挂起,恢复运行。

killall -34 pause  //34为注册的信号,pause为该进程的名字,该函数文件名为pause.c  ,生成的可执行文件pause为该进程的名字

使用挂起函数前必须先注册该函数(预设值),不然就没办法在挂起后释放函数继续运行。

2、注意,如果是执行信号默认动作的,注册的信号不能是致命信号,否则在系统捕获信号后该进程就会被杀死。

如下图:
在这里插入图片描述
在这里插入图片描述

如上图所示,信号值为6的信号是致命信号,默认动作为结束进程;当注册信号时是采用自定义函数的,程序是可以正常实现功能的;当采用默认动作是,当系统接收到6号信号,就会直接结束进程。

3、注意:9号进程和19号进程是没办法自定义处理函数的。

在这里插入图片描述

如上图所示,虽然给9号进程注册了自定义动作,但该动作并没有执行,系统还是执行了9号信号的默认动作,将进程杀死。

4、微软的Ubuntu子系统与原生的Linux系统在对可靠信号的默认动作处理上不一样。

在这里插入图片描述
在这里插入图片描述

小结

1、在pause之前要先预设值自己的信号,然后自定义动作接口。
2、预设值的信号要非致命的。
3、第9 和第19信号是不可捕捉,不可忽略的信号,没方法自定义。

小结

1、在pause之前要先预设值自己的信号,然后自定义动作接口。
2、预设值的信号要非致命的。
3、第9 和第19信号是不可捕捉,不可忽略的信号,没方法自定义。
4、微软公司提供的Ubuntu子系统对(34~64)可靠信号的默认动作与原生的Linux(Ubuntu)系统的处理不同,子系统对32个可靠信号的默认动作是忽略,而原生的Linux系统对这32个可靠信号的默认动作是结束进程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值