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

父子进程通信
#include<stdio.h>
#include<signal.h>
#include<stdlib.h>
#include<unistd.h>
int SIGNAL=1;
main(){
  int p1,i;
  void stop(){
  SIGNAL=0;
  printf("child end!\n");
  }
  while((p1=fork())<0);
  if(p1==0){
  signal(16,stop); //子进程等待信号16执行stop方法来阻断循环
  while(SIGNAL==1){ //子进程等不到信号则无限循环输出语句
  printf("i'm child!\n");
  }
  exit(0); //当子进程等到信号16后就阻止循环并结束自身
  }
  else{  
  for(i=0;i<3;i++)
  printf("i'm parent!\n"); //父进程输出3次后就中断,
  kill(p1,16); //将16发送给p1,
  wait(0); //然后等待子进程结束
  exit(0);
  }
}


我上面注释的就是程序的工作了,但是如果是这样的话一执行马上就执行父进程的工作,子进程还没等到信号就结束了,
于是我用sleep(3000给父进程睡眠3秒后执行,但父进程就好像睡了不会醒似的,一直都是子进程不断循环
这个就郁闷了,不懂啊

------解决方案--------------------
程序没有错,sleep用错了
sleep(3000)是睡眠3000s,要是休眠3s,应该是sleep(3)
windows下sleep单位是ms
------解决方案--------------------
父子进程执行的先后顺序是不确定的,编程时不能对这个先后顺序有任何假设