免费注册 查看新帖 |

Chinaunix

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

[请教]一个关于信号编程中遇到的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-02-10 17:55 |只看该作者 |倒序浏览
大家好,小弟刚刚学习信号相关的知识,看到abort()的时候试着写了下面代码想自己调试一下,
但是打印的结果我有点不明白,还请各位指点一下。


  1. #include <signal.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>

  4. static void
  5. signal_handler( int signo )
  6. {
  7.         if( signo == SIGABRT ){
  8.                 printf( "Child process is terminated by abort().\n" );
  9.         }
  10.        
  11.         return ;
  12. }

  13. int
  14. main(int argc, char *argv[])
  15. {
  16.         int i = 0, status;
  17.         pid_t pid;
  18.        
  19.         printf( "Process begins running...\n" );
  20.        
  21.         if( ( pid==fork() ) == 0 ){
  22.                 signal( SIGABRT, signal_handler );
  23.                 while( 1 ){
  24.                         printf( "i = %d\n", i++ );
  25.                         sleep( 1 );
  26.                         if( i == 5 ) abort();
  27.                 }
  28.         } else if( pid > 0 ){
  29.                 wait( &status );
  30.                 if( WIFSIGNALED(status) ){
  31.                         printf( "Child process is terminated by signal[%d]\n", WTERMSIG(status) );
  32.                 }
  33.         }
  34.        
  35.         return 0;
  36. }
复制代码

打印结果如下,用GCC编译的:
Process begins running...
i = 0
i = 0
i = 1
i = 1
i = 2
i = 2
i = 3
i = 3
i = 4
i = 4
Child process is terminated by abort().
Child process is terminated by abort().
已放弃

我不明白为什么每个内容都打印了两遍呢?还请各位多指点一下。 谢谢!

论坛徽章:
0
2 [报告]
发表于 2007-02-10 18:43 |只看该作者
if( ( pid==fork() ) == 0 ){
========================
多了个等号

论坛徽章:
0
3 [报告]
发表于 2007-02-10 23:18 |只看该作者
原帖由 只爱殷澍蕾 于 2007-2-10 18:43 发表
if( ( pid==fork() ) == 0 ){
========================
多了个等号


简直是拿出来丢人现眼了

论坛徽章:
0
4 [报告]
发表于 2007-02-11 05:52 |只看该作者
原帖由 daworld 于 2007-2-10 07:18 发表


简直是拿出来丢人现眼了


C语言学习曲线:

习惯把 == 写成 =

终于适应了 ==

习惯性的每次写 = 都想写成 ==

本能的不会搞错这两个等号

论坛徽章:
0
5 [报告]
发表于 2007-02-11 11:56 |只看该作者
原帖由 daworld 于 2007-2-10 23:18 发表


简直是拿出来丢人现眼了

没关系,这个错误很著名

论坛徽章:
0
6 [报告]
发表于 2007-02-11 11:56 |只看该作者
原帖由 emacsnw 于 2007-2-11 05:52 发表


C语言学习曲线:

习惯把 == 写成 =

终于适应了 ==

习惯性的每次写 = 都想写成 ==

本能的不会搞错这两个等号


看书

论坛徽章:
0
7 [报告]
发表于 2007-02-13 13:51 |只看该作者
一点也不丢人,多犯错误是有好处的!!
当然 犯了错误不改是要不得的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP