免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 26958 | 回复: 65

关于信号处理与系统调用的先后次序的疑问与难题 [复制链接]

论坛徽章:
0
发表于 2007-09-03 16:54 |显示全部楼层
1,当一个系统调用处于等待状态时,此时产生了信号,那末是先返回系统调用再处理信号,还是先处理信号再让系统调用返回?

2,当系统调用未处于等待状态时,比如说read调用正在往缓冲区拷贝数据,此时产生了信号,那末这个信号必须等到拷贝完数据并且read返回以后才进行处理?

论坛徽章:
0
发表于 2007-09-03 16:58 |显示全部楼层
>>1,当一个系统调用处于等待状态时,此时产生了信号,那末是先返回系统调用再处理信号,还是先处理信号再让系统调用返回?
系统调用是可以被信号中断的

>>2,当系统调用未处于等待状态时,比如说read调用正在往缓冲区拷贝数据,此时产生了信号,那末这个信号必须等到拷贝完数据并且read返回以后才进行处理?
系统调用未处于等待状态时,应该也是可以被信号中断的,但是系统调用中的原子操作不可以被中断
"read调用正在往缓冲区拷贝数据"如果这是个原子操作,则不可以被中断

原帖由 zhn636 于 2007-9-3 16:54 发表
1,当一个系统调用处于等待状态时,此时产生了信号,那末是先返回系统调用再处理信号,还是先处理信号再让系统调用返回?

2,当系统调用未处于等待状态时,比如说read调用正在往缓冲区拷贝数据,此时产生了 ...

论坛徽章:
0
发表于 2007-09-03 17:00 |显示全部楼层
那处理完信号之后,被打断的系统调用是重新再被调用呢?还是。。。。。

论坛徽章:
0
发表于 2007-09-03 17:02 |显示全部楼层
似乎是Solaris不会,Linux会
而POSIX要求重新启动
记不太清楚了

原帖由 zhn636 于 2007-9-3 17:00 发表
那处理完信号之后,被打断的系统调用是重新再被调用呢?还是。。。。。

[ 本帖最后由 ypxing 于 2007-9-3 17:05 编辑 ]

论坛徽章:
0
发表于 2007-09-03 17:05 |显示全部楼层
那重新启动,以前被打断的地方不就造成数据不一致了吗?

论坛徽章:
0
发表于 2007-09-03 17:10 |显示全部楼层
这种维护数据的一致性应该是有操作系统和相应的系统调用来保证的


原帖由 zhn636 于 2007-9-3 17:05 发表
那重新启动,以前被打断的地方不就造成数据不一致了吗?

论坛徽章:
0
发表于 2007-09-03 17:13 |显示全部楼层
我们不用管是吗?万一这个系统调用函数是non-reentrant的怎么办呢?

论坛徽章:
0
发表于 2007-09-03 17:18 |显示全部楼层
non-reentrant的函数只是告诉你不要在信号处理函数中使用而已

原帖由 zhn636 于 2007-9-3 17:13 发表
我们不用管是吗?万一这个系统调用函数是non-reentrant的怎么办呢?

论坛徽章:
0
发表于 2007-09-03 17:22 |显示全部楼层
原帖由 ypxing 于 2007-9-3 17:18 发表
non-reentrant的函数只是告诉你不要在信号处理函数中使用而已


那在其他的任何地方都可以使用是吗?为什么只是限定在信号处理函数中不让用呢?能帮忙解释一下吗?

论坛徽章:
0
发表于 2007-09-03 17:25 |显示全部楼层
原帖由 zhn636 于 2007-9-3 17:22 发表

那在其他的任何地方都可以使用是吗?为什么只是限定在信号处理函数中不让用呢?能帮忙解释一下吗?


信号处理函数中不用理由很明显吧
其它地方让用就同样很明显了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP