+ -
当前位置:首页 → 问答吧 → 帮我看看一个linux的signal函数

帮我看看一个linux的signal函数

时间:2010-08-13

来源:互联网

本帖最后由 sumland 于 2010-08-13 12:24 编辑
  1. #include<signal.h>
  2. #include<unistd.h>
  3. #include<stdio.h>
  4. void sigroutine(int dunno)
  5. {
  6. switch(dunno)
  7. {
  8. case 1:
  9. printf("Get a signal --SIGHUP");
  10. break;
  11. case 2:
  12. printf("Get a signal --SIGINT");
  13. break;
  14. case 3:
  15. printf("Get a signal --SIGQUIT");
  16. break;
  17. }
  18. return ;
  19. }
  20. int main()
  21. {
  22. printf("process id is %d",getpid());
  23. signal(SIGHUP,sigroutine);
  24. signal(SIGINT,sigroutine);
  25. signal(SIGQUIT,sigroutine);
  26. for(;;) ;
  27. }
复制代码
运行就卡住了,连getpid()都没有输出,怎么回事呢?另外我改为printf("process id is %d\n",getpid());就有输出,但是输出这个进程号以后,就继续卡住了!请高手解析一下啊!

作者: sumland   发布时间: 2010-08-13

这个for的地方是for(;   ;

作者: sumland   发布时间: 2010-08-13

晕 怎么老是屏蔽了中间的那个;啊

作者: sumland   发布时间: 2010-08-13

代码用code标签括起来

作者: ecjtubaowp   发布时间: 2010-08-13

又见缓冲区问题


printf("Get a signal --SIGINT\n");

改成这样,所有的printf格式化字符串后面都要加\n

作者: liwangli1983   发布时间: 2010-08-13

printf函数是有缓冲的,默认情况下,只有到了一定的数量级之后,才会进行输出。
但是如果加入换行符之后,printf就会将缓冲中的内容都输出。

作者: jiang1013nan   发布时间: 2010-08-13

为何打印完以后,还是卡住了呢?高手解析一下啊。

作者: sumland   发布时间: 2010-08-13

本帖最后由 snriyt 于 2010-08-13 13:14 编辑
  1. for(;;)
复制代码
dead loop;

想要输出,ctr^c;

作者: snriyt   发布时间: 2010-08-13

死循环,for后面加个sleep(10);

作者: rain_fish   发布时间: 2010-08-13