#include
#include
#include
#include
#include
void f_sigact(int num)
{
static int f = 2;
// sleep(1);
printf("I am father.This is %d\n",f);
f += 2;
}
void c_sigact(int num)
{
int static c = 1;
// sleep(1);
printf("I am child.This is %d\n",c);
c+=2;
}
int main()
{
pid_t fpid,cpid;
struct sigaction fact,cact;
fact.sa_handler = f_sigact;
cact.sa_handler = c_sigact;
// sigemptyset(&fact.sa_mask);
// sigaddset(&fact.sa_mask,SIGUSR2);
fact.sa_flags = 0;
// sigaction(SIGUSR1,&fact,NULL);
// sigemptyset(&cact.sa_mask);
sigaddset(&cact.sa_mask,SIGUSR1);
cact.sa_flags = 0;
sigaction(SIGUSR2,&cact,NULL);
fpid = fork();
if(fpid < 0){
perror("fork");
exit(1);
}
int m = 5;
while(1){
if(fpid > 0){
kill(fpid,SIGUSR2);
// sleep(1);
}
else{
cpid = getppid();
kill(cpid,SIGUSR1);
// sleep(1);
}
sleep(3);
}
return 0;
}