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

关于signal函数使用的问题
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <curses.h>
#include <signal.h>
int main()
{
  int p1, p2,i,sonpid;
  p1 = 3;
  p2 = 8;
  sonpid = fork();
  if(sonpid == 0)
  {

  signal(SIGUSR1,killson);
  while(loop == 0)
  {
  printf("p1 = %d\n", p1);
  }
  }
  signal(SIGUSR1,sigkill);
  while(loop == 0)
  {
  printf("p2 = [%d]\n", p2);
  kill( sonpid , SIGUSR1 );
  break;
  }
  return 0;
}
void killson()
{
  loop = 1;
  printf("111111111\n");
}
void sigkill()
{
  loop = 1;
  printf("222222222\n");
  alarm
}


输出结果如下:
3
3
3
[8]
3
3
3
[8]
3
3
3
1111 3
怎么会是这样的结果,那位高人解释一下啊。小弟先谢谢了!

------解决方案--------------------
signal()
第二个参数取地址。
------解决方案--------------------
loop在哪定义的?
------解决方案--------------------
loop是全局变量

两个函数还要声明


------解决方案--------------------
signal(SIGUSR1,killson); 简单的说就是把这个信号和函数关联起来,SIGUSR1信号到来时,指向killson函数.
对此程序来说,你只要明白一点:sonpid = fork(); 从此处开始后即是两个进程了,唯一的区别就是在两个进程内sonpid的值不同而已.你按这流程想一遍就通了.