信号题


问题描述

创建两个进程,主进程接收到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;
}

文章作者: Axieyun
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Axieyun !
评论
评论
  目录