zoukankan      html  css  js  c++  java
  • 系统编程-信号-信号发送kill、raise、alarm

     

    信号发送

     

    kill 和 raise函数

    kill函数参数详解:

     

     

    实验1 raise和kill 的使用

    #include <stdio.h>
    #include <signal.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <sys/wait.h>
    
    //定义信号处理函数
    //signo: 进程捕获到的信号
    void sig_handler(int signo){
        printf("%d, %d occured 
    ", getpid(), signo);
        wait(NULL);
    }
    
    int main(void)
    {
        pid_t pid;
    
        if(signal(SIGUSR1, sig_handler) == SIG_ERR){
            perror("signal error");
        }
    
        if(signal(SIGUSR2, sig_handler) == SIG_ERR){
            perror("signal error");
        }
        
        sleep(1);
    
        printf("向进程自己发送SIGUSR1 和 SIGUSR2 .
    ");
        raise(SIGUSR1);
        kill(getpid(), SIGUSR2);
    
        while(1){
            sleep(1);
        }
    }
    

    编译运行:

    结论1.1:raise(SIGUSR1) 等价于 kill(getpid(), SIGUSR2) 

    结论1.2: 进程可以向自己发送信号

     

     

    实验2 进程能够自杀吗? 

    #include <stdio.h>
    #include <signal.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <sys/wait.h>
    
    //定义信号处理函数
    //signo: 进程捕获到的信号
    void sig_handler(int signo){
        printf("%d, %d occured 
    ", getpid(), signo);
        wait(NULL);
    }
    
    int main(void)
    {
        pid_t pid;
    
        if(signal(SIGUSR1, sig_handler) == SIG_ERR){
            perror("signal error");
        }
    
        if(signal(SIGUSR2, sig_handler) == SIG_ERR){
            perror("signal error");
        }
    
        sleep(1);
    
        printf("进程能够自杀吗?
    ");
        raise(SIGKILL);
    
        while(1){
            sleep(1);
        }
    }
    

    编译运行:

    结论: 进程可以通过发送9号信号杀死自己

     

     

    定时器 alarm 和 ualarm

     

    实验3 alarm使用

    #include <stdio.h>
    #include <signal.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <sys/wait.h>
    
    //定义信号处理函数
    //signo: 进程捕获到的信号
    void sig_handler(int signo){
    
        if(signo == SIGALRM){
    	printf("clock time out 
    ");
    
    	//需要重新设置定时器,使之成为一个周期性触发的定时器
        if(0 != alarm(5)){
    	perror("alarm:5 error");
        }
        }
    }
    
    int main(void)
    {
        pid_t pid;
        int cnt=0;
    
        if(signal(SIGALRM, sig_handler) == SIG_ERR){
            perror("signal error");
        }
    
        if(0 != alarm(5)){
    	perror("alarm:5 error");
        }
    
        while(1){
    	printf("main -- 1s -- 
    ");
            sleep(1);
    	if((cnt++) == 13)
    	    alarm(0);
    	
        }
    
        return 0;
    }

    编译运行:

     

    ualarm:微妙级别的定时器,精读比alarm高

     

     

     

     

    .

    /************* 社会的有色眼光是:博士生、研究生、本科生、车间工人; 重点大学高材生、普通院校、二流院校、野鸡大学; 年薪百万、五十万、五万; 这些都只是帽子,可以失败千百次,但我和社会都觉得,人只要成功一次,就能换一顶帽子,只是社会看不见你之前的失败的帽子。 当然,换帽子决不是最终目的,走好自己的路就行。 杭州.大话西游 *******/
  • 相关阅读:
    Splay板子
    HZOI帝国2019欢乐时刻
    数据分析体系 — 用户粘性的两个计算指标(DAU/MAU和月人均活跃天数)
    mysql—MySQL数据库中10位时间戳转换为标准时间后,如何对标准时间进行加减X天处理
    每日一题力扣575 分糖果
    每日一题力扣455 小饼干和孩子
    每日一题力扣561
    每日一题力扣121 最佳买股票
    每日一题力扣605 种花问题
    每日一题力扣605 种花问题
  • 原文地址:https://www.cnblogs.com/happybirthdaytoyou/p/14617425.html
Copyright © 2011-2022 走看看