信号处理函数的返回及信号的发送

本文介绍了信号处理函数的返回方式,包括setjmp/longjmp和sigsetjmp/siglongjmp,强调了它们在信号处理中的作用。同时,详细阐述了信号发送的各种函数,如kill、raise、sigqueue、alarm、getitimer/setitimer以及abort,分析了它们的使用场景和特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

信号处理函数的返回

*信号处理函数可以正常返回,也可以调用其他函数返回到程序的主函数中,而不是从该处理函数返回.

setjmp/longjmp

 使用longjmp可以跳转到setjmp设置的位置.

 我们可以在希望返回的位置使用setjmp,直接调用setjmp时返回0,当从longjmp返回时,setjmp的返回值是longjmp的第2个参数的值,可以利用这一点使多个longjmp返回到一个setjmp处.

sigsetjmp/siglongjmp

  *避免信号被永久屏蔽
  由于在信号处理期间自动屏蔽了正在被处理的信号,而使用setjmp/longjmp跳出信号处理程序时又不会自动将信号屏蔽码修改回原来的屏蔽码,从而被永久性屏蔽.

*区别:
  与setjmp/longjmp唯一区别是sigsetjmp多了一个参数savesigs,如果savesigs非0,则sigsetjmp在env中保存进程的当前信号屏蔽字,在调用siglongjmp时会从其中恢复保存的信号屏蔽字.

信号的发送

*信号的发送主要由函数kill, raise, sigqueue, alarm, setitimer以及abort来完成.
 

kill函数

  kill函数用来发送信号给指定的进程,执行成功返回0,当有错误发生时返回-1,错误代码存入errno中.
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值