首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

父子进程通信,该如何解决

2012-03-31 
父子进程通信#includestdio.h#includesignal.h#includestdlib.h#includeunistd.hint SIGNAL1mai

父子进程通信
#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
[解决办法]
父子进程执行的先后顺序是不确定的,编程时不能对这个先后顺序有任何假设

热点排行