免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2458 | 回复: 4
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(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 (116.68 KB, 下载次数: 188)

china_unix.JPG

论坛徽章:
0
2 [报告]
发表于 2017-03-08 23:30 |只看该作者
system()的例子。为什么需要父进程中忽视中断信号?请路过的网友帮看下,先谢谢了。

china_unix2.JPG (45.92 KB, 下载次数: 171)

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
3 [报告]
发表于 2017-03-09 20:23 |只看该作者
回复 1# wali66

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

论坛徽章:
0
4 [报告]
发表于 2017-05-06 16:23 |只看该作者
本帖最后由 feiyangnow 于 2017-05-06 16:24 编辑

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

论坛徽章:
0
5 [报告]
发表于 2017-05-06 16:26 |只看该作者
本帖最后由 feiyangnow 于 2017-05-06 16:48 编辑

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

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP