免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: samuel1004
打印 上一主题 下一主题

学习信号的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-04-14 19:39 |只看该作者

回复 11楼 langue 的帖子

可是我自定义的不也是让进程终止吗?

论坛徽章:
0
12 [报告]
发表于 2007-04-14 19:39 |只看该作者
原帖由 samuel1004 于 2007-4-14 19:06 发表
我的理解是signal()就是告诉进程接受到这个信号的处理办法。。


好。与其说这是在告诉进程处理信号的办法,倒不如称之为进程届时的行为。有默认行为(SIG_DFL)、忽略(SIG_IGN)和自定义行为(你注册的函数)等多种行为,你选择了其中的两种。其中 SIGALRM 的默认行为是进程终止。还有什么不理解的地方吗?

.

论坛徽章:
0
13 [报告]
发表于 2007-04-14 19:40 |只看该作者
原帖由 samuel1004 于 2007-4-14 19:39 发表
可是我自定义的不也是让进程终止吗?


你是否认为 kill() 的用途是终止进程?

.

论坛徽章:
0
14 [报告]
发表于 2007-04-14 19:46 |只看该作者
或者你在过程 sig_alrm() 中重新注册了 SIG_DFL?哦,那只不过是下一次接收到信号时的行为罢了,不是这一次的。

论坛徽章:
0
15 [报告]
发表于 2007-04-14 19:47 |只看该作者
kill是发送信号的,我的意思是我自定义的处理函数也是让进程终止,所以我觉得main函数中的signal(SIGALRM,sig_alrm)改为signal(SIGALRM,SIG_DFL)结果应该一样,可是执行结果却不同。主要不理解的地方就是在这。
修改为signal(SIGALRM,SIG_DFL)的结果是:
child exit!
提醒时钟
不修改的结果是:
child exit!
parent awakened!
unslept time = 7

论坛徽章:
0
16 [报告]
发表于 2007-04-14 19:50 |只看该作者
好吧,你用代码举例说明,你是如何做到用信号处理函数来达到终止进程之目的的。

论坛徽章:
0
17 [报告]
发表于 2007-04-14 20:05 |只看该作者
原帖由 langue 于 2007-4-14 19:46 发表
或者你在过程 sig_alrm() 中重新注册了 SIG_DFL?哦,那只不过是下一次接收到信号时的行为罢了,不是这一次的。


看了这个我明白了。。

论坛徽章:
0
18 [报告]
发表于 2007-04-14 20:10 |只看该作者
.

我也借此奉劝大家,在提问时尽量把问题描述清楚,及早将不懂的地方阐明。唯此法可让问题尽快得到解决。

(借题发挥,楼主请勿见怪

.

论坛徽章:
0
19 [报告]
发表于 2007-04-14 20:12 |只看该作者
原帖由 langue 于 2007-4-14 20:10 发表
.

我也借此奉劝大家,在提问时尽量把问题描述清楚,及早将不懂的地方阐明。唯此法可让问题尽快得到解决。

(借题发挥,楼主请勿见怪

.

不怪不怪。谢谢版主。。

论坛徽章:
0
20 [报告]
发表于 2007-04-14 22:05 |只看该作者
这个版主是很厉害滴
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP