zoukankan      html  css  js  c++  java
  • signal( SIGINT, SigIntHandler )

    signal 的第1个参数signum表示要捕捉的信号,第2个参数是个函数指针,表示要对该信号进行捕捉的函数,该参数也可以是SIG_DEF(表示交由系统缺省处理,相当于白注册了)或SIG_IGN(表示忽略掉该信号而不做任何处理)。signal如果调用成功,返回以前该信号的处理函数的地址,否则返回 SIG_ERR。

    sighandler_t是信号捕捉函数,由signal函数注册,注册以后,在整个进程运行过程中均有效,并且对不同的信号可以注册同一个信号捕捉函数。该函数只有一个参数,表示信号值。
    示例:
    1、  捕捉终端CTRL+c产生的SIGINT信号:
    #include 
    #include 
    #include 
    #include 


    void SignHandler(int iSignNo)
    {
        printf("Capture sign no:%d ",iSignNo); 
    }
     
    int main()
    {
        signal(SIGINT,SignHandler); 
        while(true) 
            sleep(1); 
        return 0; 
    }

    该程序运行起来以后,通过按 CTRL+c将不再终止程序的运行。应为CTRL+c产生的SIGINT信号已经由进程中注册的SignHandler函数捕捉了。该程序可以通过 Ctrl+终止,因为组合键Ctrl+能够产生SIGQUIT信号,而该信号的捕捉函数尚未在程序中注册。
    2、  忽略掉终端CTRL+c产生的SIGINT信号:
    #include 
    #include 
    #include 
    #include 
     
    int main()
    {
        signal(SIGINT,SIG_IGN); 
        while(true) 
            sleep(1); 
        return 0; 
    }

    该程序运行起来以后,将CTRL+C产生的SIGINT信号忽略掉了,所以CTRL+C将不再能是该进程终止,要终止该进程,可以向进程发送SIGQUIT信号,即组合键CTRL+
     
    3、  接受信号的默认处理,接受默认处理就相当于没有写信号处理程序:
     
    #include 
    #include 
    #include 
    #include 
     
    int main()
    {
        signal(SIGINT,DEF); 
        while(true) 
            sleep(1); 
        return 0; 
    }

  • 相关阅读:
    Mac开发利器之程序员编辑器MacVim学习总结(转)
    FFmpeg的H.264解码器源代码简单分析
    Google推荐的图片加载库Glide
    Java集合及concurrent并发包总结(转)
    ArrayList、Vector和LinkedList等的差别与用法(基础回顾)
    应用最广泛的模式-工厂方法模式
    Android 开发 命名规范(基础回顾)
    Java线程问题(基础回顾)
    Mac下使用wireshark解决Interface为空的办法
    Express4.10.2开发框架中默认app.js的代码注释
  • 原文地址:https://www.cnblogs.com/Ph-one/p/6840745.html
Copyright © 2011-2022 走看看