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会在返回后再次执行。

  • 相关阅读:
    Python爬虫学习01
    Python学习Day02
    JavaScript学习笔记01
    Python学习Day01
    MarkDown实例代码
    MarkDwon的使用方法
    (转)探究requestDisallowInterceptTouchEvent失效的原因
    JNI字符串转字节数组指针方法
    justfun
    dsad
  • 原文地址:https://www.cnblogs.com/byeyear/p/3306075.html
Copyright © 2011-2022 走看看