信号机制(2)
可重入函数
某些库函数中调用了malloc
等函数,若在其调用期间被信号中断,可能引起内存分配错误。
可重入函数是异步信号安全的,它们调用时会阻塞信号,不会引起因信号产生的安全问题。
signal相关函数
sigaction
检查、修改某个信号的动作,act
为新动作,可为NULL
;oldact
为已存在动作
1 |
|
setjmp longjmp 与 sigsetjmp siglongjmp
这几个函数都用于非本地跳转,类似goto
。long
处的函数调用后,会从set
处返回。
setjmp longjmp
不恢复信号屏蔽字,而sigsetjmp siglongjmp
在set
处先保存当前信号屏蔽字,long
回来时,恢复之前保存的屏蔽字。
1 |
|
sigsuspend
原子操作,保存当前信号屏蔽字,设置信号屏蔽字mask
后pause
,在接收到信号并处理好后,恢复保存的屏蔽字再返回。它不存在临界区内收到信号的问题
1 |
|
system
执行shell命令,注意system
的返回值不一定是命令返回值,其实返回值是shell返回值,在shell异常退出时,会返回128 + 信号值