#include<stdio.h>
#include<signal.h>
#include<unistd.h>
#include<stdlib.h>
int n = 0, flag = 0;
void sys_err(char *str)
{
perror(str);
exit(1);
}
void do_sig_child(int num)
{
printf("I am child %d\t%d\n",num,n);
n++;
exit;
}
void do_sig_parent(int num)
{
printf("I am parent %d\t%d\n",num,n);
n++;
exit;
}
int main(void)
{
pid_t pid;
struct sigaction act;
if ((pid = fork()) < 0)
sys_err("fork");
else if (pid > 0)
{
//向函数体中传入进程号
do_sig_parent(getpid());
//
sleep(1);
act.sa_handler = do_sig_parent;//函数体中实现
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
//更改信号处理函数
sigaddset(&act.sa_mask,SIGUSR1);
//
do_sig_parent(0);
while (1) {
if (flag==1)
{
kill(pid, SIGUSR1);
flag = 0;
}
}
}
else if (pid == 0)
{
//传入子进程进程号
do_sig_child(getpid());
//
act.sa_handler = do_sig_child;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
//
while (1)
{
if (flag == 1)
{
kill(getppid(),SIGUSR2);
flag = 0;
}
}
}
return 0;
}
【无标题】
最新推荐文章于 2024-07-24 17:05:18 发布