zoukankan      html  css  js  c++  java
  • signal简述

    一个几乎是最简单的应用如下:

    #include <unistd.h>  // for alarm()
    #include <signal.h>  // for signal()
    #include <stdio.h>   // for printf()
    
    void do_alarm(int sig)
    {
        printf("do alarm.
    ");
        alarm(1);    // restart alarm
    }
    
    int main()
    {
        signal(SIGALRM, do_alarm);    // register signal handler
        alarm(1);    // start alarm
        while(1);    // loop forever
    }

    这个应用可以通过Ctrl+C结束。下面这个应用拦截Ctrl+C和Ctrl+Q:

    #include <signal.h>  // for signal()
    #include <stdio.h>   // for printf()
    
    void do_sig_exit(int sig)
    {
        printf("SIGINT or SIGQUIT received.
    ");
    }
    
    int main()
    {
        signal(SIGINT, do_sig_exit);
        signal(SIGQUIT, do_sig_exit);
        while(1);    // loop forever
    }

    以上程序可以使用kill -9终止。

    可中断系统调用总是会被中断,不管你是否安装了signal处理函数。

    一般来说signal是不会累计的(?有例外否?)。以上面的代码为例,如果在执行do_sig_exit前产生了多次SIGINT,do_sig_exit仅执行一次。已产生的signal在进入信号处理函数时清除,如果在do_sig_exit左括号后产生了新的SIGINT,do_sig_exit会在返回后再次执行。

  • 相关阅读:
    学习方法与经验总结
    工具综合症?资料收集狂?
    SpringMVC 过滤器Filter使用解析
    Spring 管理Filter和Servlet
    pom.xml配置详解
    开发Java web应用程序的介绍
    java web构建学习(概念基础)
    题目1474:矩阵幂
    题目1473:二进制数
    Python strip()方法
  • 原文地址:https://www.cnblogs.com/byeyear/p/3306075.html
Copyright © 2011-2022 走看看