日期:2014-05-16  浏览次数:20551 次

刚接触linux环境编程,关于signal()和pause()的问题,请教高手
#include<signal.h>
#include<stdio.h>
#include<stdlib.h>

void my_func(int sign_no)
{
  if(sign_no ==SIGINT)
  printf("i have get SIGINT\n");
  else if(sign_no == SIGQUIT)
  printf("i have get SIGQUIT\n");
}
int main()
{
  printf("waiting for signal SIGINT or SIGQUIT\n");
  signal(SIGINT,my_func);
  signal(SIGQUIT,my_func);
  pause();
  exit(0);
}
在一终端输入./a.out,执行到pause()时,然后在另一终端输入kill -s SIGINT 进程ID后,终端输出i have get SIGINT。我的困惑时:程序是顺序执行,为什么此时又回到signal(SIGINT,my_func)执行?


------解决方案--------------------
signal是注册信号处理函数,不是执行信号处理函数.
------解决方案--------------------
探讨

引用:

悲剧,3L没看题。。。

引用:
为什么此时又回到signal(SIGINT,my_func)执行?


什么意思?

程序执行到pause()处被阻塞,然后信号SIGINT来时,输出i have get SIGINT(执行了my_func函数,该函数由signal()调用),既此时函数从pau……