美文网首页
linux下信号相关

linux下信号相关

作者: 小雨启明 | 来源:发表于2018-09-12 23:16 被阅读0次
    1、信号简介

    信号其实是一种软中断

    2、kill

    kill pid 和kill -15 pid 相等
    系统会发送一个SIGTERM的信号给对应的程序。当程序接收到该signal后,将会发生以下的事情
    1.程序立刻停止
    2.当程序释放相应资源后再停止
    3.程序可能仍然继续运行



    大部分程序接收到SIGTERM信号后,会先释放自己的资源,然后在停止。但是也有程序可以在接受到信号量后,做一些其他的事情,并且这些事情是可以配置的。如果程序正在等待IO,可能就不会立马做出相应。也就是说,SIGTERM多半是会被阻塞的、忽略。(附上一张进程状态转换图)
    kill -9 pid 为强制终止 该信号无法被捕获和忽略 还有SIGSTOP信号 特性相同

    #include <unistd.h>
    #include <signal.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <errno.h>
    
    void sighandler(int sig){
        if(sig == SIGTERM)
        {
            printf(" 收到15号信号\n");
        }else{
            printf("收到其他信号\n");
        }
    }
    
    int main(){
        if(signal(SIGTERM,sighandler) == SIG_ERR){
            printf("mistake");
        }
        signal(SIGKILL,sighandler);
        printf("my pid %d\n",getpid());
        while(1){
            printf("...............\n");
            sleep(10);
        }
        //printf("%d",n);
    }
    
    
    3、信号的流程图

    1)signal函数

    #include <signal.h>
    typedef void (*sighandler_t)(int);
    sighandler_t signal(int signum, sighandler_t handler);
    

    signal 信号注册函数
    signum 需要捕捉的信号
    handler 表示捕获到信号后调用的函数。
    2)sigset_t 信号容器
    64位整数 用0 ,1表示该位信号在不在集合中。
    3)阻塞信号集 未决信号集
    阻塞信号集:捕获信号后,不想进行处理的信号集合
    未决信号集:捕获信号后,没来得及处理的信号集合
    4)sigaction 带参的信号注册函数

    4、信号的实现原理和步骤

    参考:https://blog.csdn.net/qq_28110727/article/details/77484617
    更详细的 包括可靠信号 不可靠信号 等https://www.cnblogs.com/hoys/archive/2012/08/19/2646377.html

    相关文章

      网友评论

          本文标题:linux下信号相关

          本文链接:https://www.haomeiwen.com/subject/ojzbgftx.html