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

#include <unistd.h>  // for alarm()
#include <signal.h> // for signal()
#include <stdio.h> // for printf() void do_alarm(int sig)
{
printf("do alarm.\n");
alarm(); // restart alarm
} int main()
{
signal(SIGALRM, do_alarm); // register signal handler
alarm(); // start alarm
while(); // 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.\n");
} int main()
{
signal(SIGINT, do_sig_exit);
signal(SIGQUIT, do_sig_exit);
while(); // loop forever
}

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

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

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

signal简述的更多相关文章

  1. 蓝牙disable流程简述

    蓝牙关闭的流程比打开流程要简单,主要就是一些profile的断连以及协议栈相关结构的释放. 这里简单说一下其流程,就直接从协议栈的disable的接口说起了. static int disable(v ...

  2. 【windows 操作系统】进程间通信(IPC)简述|无名管道和命名管道 消息队列、信号量、共享存储、Socket、Streams等

    一.进程间通信简述 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进 ...

  3. java 线程 Lock 锁使用Condition实现线程的等待(await)与通知(signal)

    一.Condition 类 在前面我们学习与synchronized锁配合的线程等待(Object.wait)与线程通知(Object.notify),那么对于JDK1.5 的 java.util.c ...

  4. Nginx 配置简述

    不论是本地开发,还是远程到 Server 开发,还是给提供 demo 给人看效果,我们时常需要对 Nginx 做配置,Nginx 的配置项相当多,如果考虑性能配置起来会比较麻烦.不过,我们往往只是需要 ...

  5. 简述 OAuth 2.0 的运作流程

    本文将以用户使用 github 登录网站留言为例,简述 OAuth 2.0 的运作流程. 假如我有一个网站,你是我网站上的访客,看了文章想留言表示「朕已阅」,留言时发现有这个网站的帐号才能够留言,此时 ...

  6. JavaScript单线程和浏览器事件循环简述

    JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...

  7. 简述linux同步与异步、阻塞与非阻塞概念以及五种IO模型

    1.概念剖析 相信很多从事linux后台开发工作的都接触过同步&异步.阻塞&非阻塞这样的概念,也相信都曾经产生过误解,比如认为同步就是阻塞.异步就是非阻塞,下面我们先剖析下这几个概念分 ...

  8. Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】

    原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...

  9. Linux 信号(二)—— signal 函数

    弗洛伊德认为:要解决这些苦恼,当事人就要通过回忆并理解自己早期的童年经历,来获得对潜意识冲突的顿悟.弗洛伊德的疗法被称为“精神分析” (psychoanalysis),在 20 世纪的很长一段时间被心 ...

随机推荐

  1. bug 问题

    1. 图片 img 标签,在IE浏览器下会有空白 - 解决办法:display:block; 2. IE6 下父级没有宽高,不会触发haslayout. 触发原因:子级浮动,父级没有宽高,overfl ...

  2. spoj375

    题解: 树链剖分的模板题 具体代码详见网上的其他代码 代码: #include<cstdio> #include<cmath> #include<cstring> ...

  3. java maven 安装

    1.java环境安装 maven 想要安装 Apache Maven 在Windows 系统上, 需要下载 Maven 的 zip 文件,并将其解压到你想安装的目录,并配置 Windows 环境变量. ...

  4. 【python爬虫】常见面试题之http协议问题总结

    简介 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.HTTP协议是用于从WWW服务器传输超文本到本地浏览器的传送协议.它可以使浏览器更加高效,使网络传输减 ...

  5. 1.4 C++内联函数(inline)

    参考:http://www.weixueyuan.net/view/6330.html C++语言新增关键字 inline,用于将一个函数声明为内联函数.在程序编译时,编译器会将内联函数调用处用函数体 ...

  6. 未能加载文件或程序集“Microsoft.Office.Interop.Excel

    解决方法:未能加载文件或程序集“Microsoft.Office.Interop.Excel...”   2010-07-25 08:06:15   来源:源码之家 站长整理    [大 中 小]   ...

  7. 使用MyEclipse开发Java EE应用:EJB项目开发初探(下)

    你开学,我放价!MyEclipse线上狂欢继续!火热开启中>> [MyEclipse最新版下载] 三.EJB 3.x项目中的持久性支持 当创建EJB 3.x项目时,作为选项您可以添加JPA ...

  8. jquery 中事件

    jQuery 事件 - submit() 方法 定义和用法 当提交表单时,会发生 submit 事件. 该事件只适用于表单元素. submit() 方法触发 submit 事件,或规定当发生 subm ...

  9. 使用ALVideoPlayerSurface制作视频播放器

    头两天介绍了开源控件包alcinoe,现在利用其中的ALVideoPlayerSurface视频播放控件,实作一个视频播放器. 首先,建一个fmx项目,然后从组件面版,拖放一个TAlVideoPlay ...

  10. Ubuntu终端点击确定按钮的方法

    Ubuntu终端里出现需要点击 确定 按钮的时候,直接鼠标点击 确定 是不生效的,这个时候需要利用tab键选中这个 确定 按钮,然后回车键就可以了.