#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;
}
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
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;
struct sigaction ofact,ocact;
fact.sa_handler = f_sigact;
cact.sa_handler = c_sigact;
// sigemptyset(&fact.sa_mask);
// sigaddset(&fact.sa_mask,SIGUSR2);
fact.sa_flags = 0;
cact.sa_flags = 0;
// sigaction(SIGUSR1,&fact,NULL);
// sigemptyset(&cact.sa_mask);
sigaddset(&cact.sa_mask,SIGUSR1);
sigaddset(&fact.sa_mask,SIGUSR2);
//sigaction(SIGUSR2,&cact,NULL);
cpid = fork();
if(cpid < 0){
perror("fork");
exit(1);
}
else if (cpid==0){
//it's a child
sigaction(SIGUSR1,&cact,&ocact);
}
else{
//it;s the parent
sigaction(SIGUSR2,&fact,&ofact);
}
int m = 5;
sleep(1);
while(1){
if (cpid>0)
{
fpid = getpid();
kill(cpid,SIGUSR1);
sleep(1);
kill(fpid,SIGUSR2);
sleep(1);
}
sleep(3);
}
return 0;
}