zoukankan      html  css  js  c++  java
  • Linux signal

    #include <stdio.h>
    #include <stdlib.h>
    #include <signal.h>
    #include <unistd.h>
    #include <sys/wait.h>
    
    void handler(int signo)
    {
        switch(signo) {
        case SIGUSR1: //处理信号 SIGUSR1
            printf("Parent : catch SIGUSR1\n");
        case SIGUSR2: //处理信号 SIGUSR2
            printf("Child : catch SIGUSR2\n");
        default:      //本例不支持
            printf("Should not be here\n");
            break;
        }
    }
    
    int main(void)
    {
        pid_t ppid, cpid;
        //为两个信号设置信号处理函数
        if(signal(SIGUSR1, handler) == SIG_ERR) { //设置出错
            perror("Can't set handler for SIGUSR1");
            exit(1);
        }
    
        if(signal(SIGUSR2, handler) == SIG_ERR) { //设置出错
            perror("Can't set handler for SIGUSR2");
            exit(1);
        }
    
        ppid = getpid();//得到父进程ID
    
        if((cpid = fork()) < 0) {
            perror("fail to fork");
            exit(1);
        } else if(cpid == 0) { //子进程
            if(kill(ppid, SIGUSR1) == -1) {
                perror("fail to send signal");
                exit(1);
            }
    
            while(1);//死循环,等待父进程的信号
        } else {
            sleep(1);//休眠,保证子进程先运行,并且发送SIGUSR1信号
    
            if(kill(ppid, SIGUSR2) == -1) {
                perror("fail to send signal");
                exit(1);
            }
    
            printf("kill child\n");//输出提示
    
            if(kill(ppid, SIGKILL) == -1) { //发送SIGKILL信号,杀死子进程
                perror("fail to send signal");
                exit(1);
            }
    
            if(wait(NULL) ==-1) { //回收子进程状态,避免僵尸进程
                perror("fail to wait");
                exit(1);
            }
        }
    
        return;
    }
    
    //-----------------------------------------------------------------------------------------------------
  • 相关阅读:
    c语言动态申请内存(malloc与calloc)
    二维数组的指针
    二分查找(用c语言实现)
    Docker一篇从入门到实战
    MyBatisPlus一篇从入门到实战
    MyBatis一篇从入门到实战
    MySQL一篇从入门到实战
    Nginx一篇从入门到实战
    day04_02逻辑运算符
    day4_01循环引用带来的内存泄露问题
  • 原文地址:https://www.cnblogs.com/xuejianhui/p/2780269.html
Copyright © 2011-2022 走看看