#include<unistd.h>
#include<stdio.h>
#include<signal.h>
#include<sys/types.h>
#include<stdlib.h>
void myfun(int signum)
{
printf("received signal\n");
return;
}
int main()
{
int num1,num2;
num1=1;
num2=1;
pid_t key;
key=fork();
if(key<0)
{
printf("fork create fail\n");
return 0;
}
pid_t ppid;
pid_t pid;
ppid=getppid();
pid =getpid();
if(key == 0)
//chlid
{
printf("key=%d\n",key);
// sleep(1);
signal(SIGUSR2,myfun);
while(num1<10)
{
printf("target pid is %d,num1=%d\n",getpid(),num1);
printf("child proc wak\n");
kill(getppid(),SIGUSR1);
pause();
num1++;
}
// sleep(600);
exit(0);
}
if(key > 0)
{
printf("key=%d\n",key);
signal(SIGUSR1,myfun);
while(num2<10)
{
// target=getpid();
pause();
printf("target pid is %d,num2=%d\n",getpid(),num2);
printf("parent proc wak\n");
num2++;
kill(key,SIGUSR2);
// pause();
}
// exit(0);
// sleep(6000);
int sta;
waitpid(key,&sta,0);
}
return 1;
}
程序的目的是父进程和子进程循环打1到10,但是不知道为什么大部分时候都会卡在第一次循环结束,偶尔能顺利运行完,请问这是为什么,求大神解答我的疑问 |