免费注册 查看新帖 |

ChinaUnix.net

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

[Linux] 《UNIX编程环境》这本书里面关于父进程忽视中断信号的问题 [复制链接]

论坛徽章:
0
发表于 2017-03-08 23:28 |显示全部楼层
5可用积分
我看到第7章第5节 : 信号和中断
其中写到:“当信号捕获与执行其他程序相结合时,要牢记他们之间的细微差别。假设一个程序捕获中断,同时又包括一个执行其他程序的方法(像ed中的!)。 代码看上去像下面这样”
    if ((fork() == 0))
        execlp(...);
        signal(SIGINT,SIG_IGN); /*parent  ignores interrupts*/
        wait(&status);
        signal(SIGINT,onintr);
-----------
我的疑问是父进程为什么需要忽视中断了? 书中接下来还以system()系统调用为例。

china_unix.JPG

论坛徽章:
0
发表于 2017-03-08 23:30 |显示全部楼层
system()的例子。为什么需要父进程中忽视中断信号?请路过的网友帮看下,先谢谢了。
china_unix2.JPG

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2017-03-09 20:23 |显示全部楼层
回复 1# wali66

作者解释的还不够清楚?就是不想父进程中的 wait() 被中断嘛。

论坛徽章:
0
发表于 2017-05-06 16:23 |显示全部楼层
本帖最后由 feiyangnow 于 2017-05-06 16:24 编辑

实际上作者的解释可能有些空隙,但大体的意思已经表达出来了,
(1)对于SIGINTR的处理一般的程序都会继续的执行,在循环中继续continue, 所以对于是控制台程序,它可能也去读取输入。
(2)对于wait 或者waitpid,在父进程收到SIGINTR时,也会wait返回,也会进行输入输出的操作。
故会出现数据的读取混乱,所以父进程会忽略盖该信号。
但是程序的调度,不一定父进程先执行,所以父进程也会有机会收到,所以最后使用signal mask.

论坛徽章:
0
发表于 2017-05-06 16:26 |显示全部楼层
本帖最后由 feiyangnow 于 2017-05-06 16:48 编辑

实际上作者的解释可能有些空隙,但大体的意思已经表达出来了,
(1)对于SIGINTR的处理一般的程序都会继续的执行,在循环中继续continue, 所以对于是控制台程序,它可能也去读取输入。
(2)对于wait 或者waitpid, 由于终端信号会传递给前台进程组的所有进程,所以父进程也会收到SIGINTR时,也会wait返回,本应发给子进程的终端,也意外的发给了父进程,所以应该在父进程中屏蔽掉。
但是程序的调度,不一定父进程先执行,所以父进程也会有机会收到,所以最好是在fork之前使用sigprocmask
在子进程中恢复为默认的设置。

(3)上面的程序还存在的问题是,没有使用waitpid,导致接收到不该接受的进程退出。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

基于案例的 SQL 优化实战训练营

讲师:中电福富特级专家梁敬彬,参与本次课程培训,你将收获:
1. 能编写出较为高效的 SQL;
2. 能解决70%以上的数据库常见优化问题;
3. 能得到老师提供的高效的相关工具和解决方案;
4. 能举一反三,收获不仅仅是 SQL 优化。
现在购票享受8.8折优惠!
----------------------------------------
优惠时间:2019年3月20日前

大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP