问题描述
创建两个进程,主进程接收到SIGINT信号,分别给两个子进程发送SIGUSR1、SIGUSR2信号,分别输出两句话。
思路
主进程一直等待信号到了,子进程屏蔽SIGINT信号,信号到了分别kill发送信号给子进程。
/*************************************************************************
> File Name: 作业.c
> Author:
> Mail:
> Created Time: Sun 30 Jan 2022 08:42:23 PM CST
************************************************************************/
#include<stdio.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/shm.h>
#include <sys/msg.h>
#include <sys/ipc.h>
int mask;
void stop(int n) {
mask = 0;
}
void f1(int sigmenber) {
printf("child1 is killed by parent!\n");
}
void f2(int sigmember) {
printf("child2 is killed by parent!\n");
}
int main() {
pid_t pd1 = fork();
if (pd1 < 0) {
perror("fork");
exit(1);
}
if (pd1) {
//printf("pd1 = %d\n", pd1);
pid_t pd2 = fork();
if (pd2 < 0) {
perror("fork2");
exit(1);
}
if (pd2) {
mask = 1;
signal(SIGINT, &stop);
while(mask != 0) {
printf("在父进程中\n");
sleep(1);
}
//pause();
kill(pd1, SIGUSR1);
kill(pd2, SIGUSR2);
wait(NULL);
wait(NULL);
} else {
printf("在子进程2~\n");
//屏蔽SIGINT信号
sigset_t sig;
sigemptyset(&sig);
sigaddset(&sig, SIGINT);
sigprocmask(SIG_BLOCK, &sig, NULL);
signal(SIGUSR2, &f2); //自定义信号动作
pause();
exit(1);
}
} else {
//屏蔽SIGINT信号
printf("在子进程1~\n");
sigset_t sig;
sigemptyset(&sig);
sigaddset(&sig, SIGINT);
sigprocmask(SIG_BLOCK, &sig, NULL);
signal(SIGUSR1, &f1); //自定义信号动作
pause();
exit(1);
}
return 0;
}