关于alarm以及SIGALRM信号
时间:2010-09-08
来源:互联网
APUE中有如下程序
复制代码
我很困惑:这段程序中,为什么说当alarm到了后,signal函数调用完sig_alrm函数返回了之后,read也终止了?
我自己在CentOS上测试,结果是read并没有终止,从sig_alrm返回后,read仍然处于读状态,直到读到回车为止。
书里面说很多Unix应用程序都有这一段,用来设置一个能够被block的进程的上限时间,当超过这个时间后,这个被block的进程就会被终止了~
我在考虑除非在sig_alrm中exit,不然的话它是不会终止的,为什么注释部分却说"nothing to do, just return to interrupt the read",事实上,read并没有被interrept,我测试了的。
而且我添加exit到sig_alrm函数后,发现即使exit了,结果write还是执行了,这个是因为缓存的原因吧?为什么进程结束了,标准输入读入的数据还是输出了?是因为exit本身就会先执行清理再调用_exit函数退出,对吧,请高人指点迷津,再次谢过!
- #include "apue.h"
-
- static void sig_alrm(int);
-
- int
- main(void)
- {
- int n;
- char line[MAXLINE];
-
- if (signal(SIGALRM, sig_alrm) == SIG_ERR)
- err_sys("signal(SIGALRM) error");
-
- alarm(10);
- if ((n = read(STDIN_FILENO, line, MAXLINE)) < 0)
- err_sys("read error");
- alarm(0);
-
- write(STDOUT_FILENO, line, n);
- exit(0);
- }
-
- static void
- sig_alrm(int signo)
- {
- /* nothing to do, just return to interrupt the read */
- }
我自己在CentOS上测试,结果是read并没有终止,从sig_alrm返回后,read仍然处于读状态,直到读到回车为止。
书里面说很多Unix应用程序都有这一段,用来设置一个能够被block的进程的上限时间,当超过这个时间后,这个被block的进程就会被终止了~
我在考虑除非在sig_alrm中exit,不然的话它是不会终止的,为什么注释部分却说"nothing to do, just return to interrupt the read",事实上,read并没有被interrept,我测试了的。
而且我添加exit到sig_alrm函数后,发现即使exit了,结果write还是执行了,这个是因为缓存的原因吧?为什么进程结束了,标准输入读入的数据还是输出了?是因为exit本身就会先执行清理再调用_exit函数退出,对吧,请高人指点迷津,再次谢过!
作者: blackgenius 发布时间: 2010-09-08
系统实现不一样啦,有的系统read这样的系统调用会被信号中止,有的会自动重启,LINUX属于后一种。要想实现LINUX下中止的效果,可以用sigaction安装信号处理函数,并设置sa_flags中的项让系统调用不自动重启,详见APUE2中文版第262-263的说明和265最下边的示例程序。
作者: liwangli1983 发布时间: 2010-09-08
作者: blackgenius 发布时间: 2010-09-08
QUOTE:
回复 liwangli1983
高人呐!看过那一段了,只是忘记了~呵呵!谢谢指点,你有APUE第二版的中文版电子版 ...
blackgenius 发表于 2010-09-08 20:51
高人呐!看过那一段了,只是忘记了~呵呵!谢谢指点,你有APUE第二版的中文版电子版 ...
blackgenius 发表于 2010-09-08 20:51
。。。我有书,刚才现翻的。。。要不然上哪记得那么清楚。这么经典的书最好还是买一本,就算嫌正版贵去淘宝收本便宜的也行啊
作者: liwangli1983 发布时间: 2010-09-08
回复 liwangli1983
呵呵~那倒是,只可惜我目前工作没有稳定下来,东跑西跑,带着那么大一本东西挺重的,英文版的看到线程那里开始晕了~一开始没看懂,所以想有本中文的对着看~过段时间稳定下来一定去买一本来!
呵呵~那倒是,只可惜我目前工作没有稳定下来,东跑西跑,带着那么大一本东西挺重的,英文版的看到线程那里开始晕了~一开始没看懂,所以想有本中文的对着看~过段时间稳定下来一定去买一本来!
作者: blackgenius 发布时间: 2010-09-08
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28