内核版本是Linux version 3.5.0-23-generic,

系统版本是Ubuntu 12.04.2,

编译工具是gcc version 4.6.3,以上是我所使用的开发环境。

在了解 signal 函数的过程中,发现运行程序后,进程处理信号后,就将对信号的响应配置为默认动作。源代码如下:

#include "apue.h"static void sig_usr(int);int
main(void)
{int c;if (signal(SIGUSR1, sig_usr) == SIG_ERR) err_sys("can't catch SIGUSR1");if (signal(SIGUSR2, sig_usr) == SIG_ERR)err_sys("can't catch SIGUSR2");for ( ; ; ) {if ((c = getc(stdin)) != EOF) { /* 从进程标准输入中获取一个字符 */if (c == 'r') {         /* 输入字符为r,则向自身进程发送信号 */if (raise(SIGUSR1) == -1)err_sys("can't sent SIGUSR1");}}}
}static void
sig_usr(int signo)
{if (signo == SIGUSR1) {printf("received SIGUSR1\n");}else if (signo == SIGUSR2) {printf("received SIGUSR2\n");}else {err_dump("received signal %d\n", signo);}
}

执行编译代码后生成的程序,往终端输入两次 r ,终端的输入输出如下所示:

r
received SIGUSR1
r
用户定义信号 1

但是很多资料说到这么一句:Linux支持不可靠信号,但是对不可靠信号机制做了改进:在调用完信号处理函数后,不必重新调用该信号的安装函数(信号安装函数是在可靠机制上的实现)。但是程序运行的结果跟理论是不一致的!

后来 man signal 指令来查看 signal 函数的说明,里面说到的意思大概是信号处理程序处理完传递进来的信号后,会将信号处理重新设置为SIG_DFL,也就是默认状态。当然,这是我也有可能是我内核版本低或者其他原因。因为水平有限,对待这类模棱两可的问题无法找出确切的答案,欢迎读者的指正。

参考资料:《UNIX环境高级编程》

关于 Linux 中 signal 函数信号处理的讨论相关推荐

  1. linux中signal函数返回值,signal函数、sigaction函数及信号集操作函数

    信号是与一定的进程相联系的.也就是说一个进程可以决定在进程中对哪些信号进行什 么样的处理.例如一个进程可以忽略某些信号而只处理其他一些信号另外一个进程还可以选择如何处理信号.总之这些总与特定的进程相联 ...

  2. linux中signal函数的简单用法

    信号是软件中断,它提供了一种处理异步事件的方法,每个信号有个以SIG打头的名字,讲signal函数之前我们先了解下当前系统所支持的信号名称,在linux中敲下kill -l就能查看. [lingyun ...

  3. Linux中signal函数

    signal函数介绍 #include <signal.h> signal(参数1,参数2): 参数1:我们要进行处理的信号.系统的信号我们可以再终端键入kill -l查看(共64个).其 ...

  4. Linux中pthread_create函数的实现

    转:http://blog.sina.com.cn/s/blog_6abf2c040101fpca.html 原文地址:[原]Linux中pthread_create函数的实现作者:jiq408694 ...

  5. linux 中 sigaction 函数详解

    linux 中 sigaction 函数详解 一.函数原型 sigaction 函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作) int sigaction(int signum, ...

  6. linux中probe函数传递参数的寻找(下)

    点击打开链接 linux中probe函数传递参数的寻找(下) 通过追寻driver的脚步,我们有了努力的方向:只有找到spi_bus_type的填充device即可,下面该从device去打通,当两个 ...

  7. linux中 probe函数的何时调用的?

    点击打开链接 linux中 probe函数何时调用的 所以的驱动教程上都说:只有设备和驱动的名字匹配,BUS就会调用驱动的probe函数,但是有时我们要看看probe函数里面到底做了什么,还有传递给p ...

  8. 每天学一点儿shell:linux中时间函数的date的用法

    文章目录 1.linux中date函数格式 2.date日期函数的具体用法 2.1.获取相应格式的日期 2.2.获取相隔时间段的日期 2.2.1.获取今天的日期 2.2.2.获取昨天的日期 2.2.3 ...

  9. linux中request_region()函数的分析

    linux中request_region()函数的分析 struct resource ioport_resource = { .name = "PCI IO", .start = ...

  10. linux内核sock_sendmsg,为什么linux中sendto函数中的msg.msg_iovlen=1;

    为什么linux中sendto函数中的msg.msg_iovlen=1; | 内核中定义的sys_sendto的源码吗? 这个属于sendmsg中struct msghdr的用法问题, sys_sen ...

最新文章

  1. WCF 4.0 进阶系列 – 第十二章 实现单向操作和异步操作(下)
  2. KMPLAYER无法播放rmvb格式的解决办法
  3. [推荐]大量 Blazor 学习资源(二)
  4. HBase之Region上Spilt流程分析
  5. C#版Windows服务安装卸载小工具-附源码
  6. LaTex的book类型中,目录及chapter前自动插入空白页面
  7. 十行代码实现高仿Promise
  8. java线程-synchronized实现可见性代码
  9. CSS中clear:both用法及事例
  10. 学成在线day13,HLS视频文件处理,FFmpeg,画面清晰度的码率, H5播放器video.js,媒资管理,断点上传文件和合并文件,WebUploader百度上传插件,
  11. 3.在LCD12864上显示属于你的文字
  12. 9080端口对应服务器文件位置,Filenet更改端口-更改9080 端口到 80 端口
  13. 下载百度网盘资源不限速的两种方法
  14. linux上的离线地图,离线地图接入指南
  15. Mybatis generator mapper文件重新生成不会覆盖原文件
  16. 带宽、吞吐量与线速的关系(转载)
  17. 【瀑布流插件】vue-masonry
  18. Arduino智能小车——循迹篇
  19. UDA:Unsupervised Data Augmentation for Consistency Training
  20. 云端、小企即将到来的两头热的存储市场

热门文章

  1. 原生JS实现的跳一跳小游戏完整实例
  2. c++编译时出现discards qualifiers [-fpermissive]的错误
  3. 中介效应、调节效应与交互作用咋回事?
  4. win10如何做到在指定目录下打开cmd命令窗口
  5. logging日志带颜色
  6. 非常全面的概念数据模型概述-PD下画E-R图
  7. html自动拿微信扫描,HTML——微信浏览器H5页面调用微信扫一扫
  8. 计算机向文档中插入文本框,Word怎么插入文本框和编辑文本框
  9. nodejs中文件上传并限制图片大小
  10. caj文件怎么打开?