父子进程间轮流+1输出,linux环境下运行
#include<stdio.h>
#include<signal.h>
#include<unistd.h>
#include <sys/types.h>
//#include<fcntl.h>
//#include<stdlib.h>
int num=0;
int flag=0;
void parent()
{
/*加sleep(1)的原因是防止flag变得太快,导致程序锁死
eg:1执行玩后父进程收到信号,执行parent,然后接着执行2,且执行2的flag=0,然后执行1的flag=0,这样程序就锁死了*/
sleep(1);
flag=1;
printf("num=%d\n",num);
num+=2;
}
void kid()
{
sleep(1);
flag=1;
printf("num=%d\n",num);
num+=2;
}
int main()
{
pid_t pid=fork();
if(pid==0)
{
num=1;
signal(SIGUSR2,kid);
pid_t ppid=getppid();
while(1)
{
if(flag==1)
{
kill(ppid,SIGUSR1);//1
flag=0;
}
}
}
if(pid>0)
{
usleep(10);
num=2;
signal(SIGUSR1,parent);
kill(pid,SIGUSR2);
while(1)
{
if(flag==1)
{
kill(pid,SIGUSR2);//2
flag=0;
}
}
}
return 0;
}
入 --