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