当前位置: 技术问答>linux和unix
关于被信号打断的函数的执行。
来源: 互联网 发布时间:2017-03-19
本文导语: 1。如果是用户函数,是否执行完信号处理函数后,又接着处理用户函数,好像完全没被打断过一样。而要重新执行的都是系统调用? 2。 关于系统调用,如果系统调用被打断后重新执行,是否被打断的那个调用可...
1。如果是用户函数,是否执行完信号处理函数后,又接着处理用户函数,好像完全没被打断过一样。而要重新执行的都是系统调用?
2。 关于系统调用,如果系统调用被打断后重新执行,是否被打断的那个调用可以像数据库事务一样回到调用之前的状态 ,不然的话malloc等函数里的系统调用被打断后,如果没回到以前的状态,那再执行这个系统调用应该就会出现类似于在信号处理函数里调用不可重入函数的情况吧
2。 关于系统调用,如果系统调用被打断后重新执行,是否被打断的那个调用可以像数据库事务一样回到调用之前的状态 ,不然的话malloc等函数里的系统调用被打断后,如果没回到以前的状态,那再执行这个系统调用应该就会出现类似于在信号处理函数里调用不可重入函数的情况吧
|
signal函数,是否重启被中断的系统调用由操作系统的具体实现决定,
sigaction函数,应用程序可以控制是否重启被中断的系统调用。
sigaction函数,应用程序可以控制是否重启被中断的系统调用。
|
信号的执行是以软中断方式执行的。目前,大多数linux系统中,系统调用被信号打断之后,都是自动重启的而用户程序,则接受到信号后,默认是不重启的,也就是接受到信号之后,默认是停止用户函数。
|
Linux下我没有试验过,然是在FreeBSD和AIX5.3 上 SA_RESTART 确实起作用。