信号处理函数的返回
*信号处理函数可以正常返回,也可以调用其他函数返回到程序的主函数中,而不是从该处理函数返回.
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中.