SIGABRT是中止一个程序,它可以被捕捉,但不能被阻塞。处理函数返回后,所有打开的文件描述符将会被关闭,流也会被flush。程序会结束,有可能的话还会core dump。 当程序调用abort(3)时,该进程会向自己发送SIGABRT信号。所以,SIGABRT一般用于信号中一些关键的处理,assert失败时也会使用它。你不应该去捕捉SIGSEGV和SIGABRT信号,如果收到这种信号,说明进程处于一个不确定的状态,很可能会直接挂起。

对于应用程序来说,什么样的代码会产生这些信号?
我自己常碰到的是
  char *p = NULL;
  *p = 1;
会产生SIGSEGV

对同一个指针free() 2次可能会产生SIGABRT
address alignment可能会导致SIGBUS

$ kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR213) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+136) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+540) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+944) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+1348) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-1352) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-956) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-560) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-164) SIGRTMAX

列表中,编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。不可靠信号和可靠信号的区别在于前者不支持排队,可能会造成信号丢失,而后者不会。

下面我们对编号小于SIGRTMIN的信号进行讨论。

1) SIGHUP
本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联。

登录Linux时,系统会分配给登录用户一个终端(Session)。在这个终端运行的所有程序,包括前台进程组和后台进程组,一般都属于这个 Session。当用户退出Linux登录时,前台进程组和后台有对终端输出的进程将会收到SIGHUP信号。这个信号的默认操作为终止进程,因此前台进 程组和后台有终端输出的进程就会中止。不过可以捕获这个信号,比如wget能捕获SIGHUP信号,并忽略它,这样就算退出了Linux登录,wget也 能继续下载。

此外,对于与终端脱离关系的守护进程,这个信号用于通知它重新读取配置文件。

2) SIGINT
程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程。

3) SIGQUIT
和SIGINT类似, 但由QUIT字符(通常是Ctrl-\)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。

4) SIGILL
执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行数据段. 堆栈溢出时也有可能产生这个信号。

5) SIGTRAP
由断点指令或其它trap指令产生. 由debugger使用。

6) SIGABRT
调用abort函数生成的信号。

7) SIGBUS
非法地址, 包括内存地址对齐(alignment)出错。比如访问一个四个字长的整数, 但其地址不是4的倍数。它与SIGSEGV的区别在于后者是由于对合法存储地址的非法访问触发的(如访问不属于自己存储空间或只读存储空间)。

8) SIGFPE
在发生致命的算术运算错误时发出. 不仅包括浮点运算错误, 还包括溢出及除数为0等其它所有的算术的错误。

9) SIGKILL
用来立即结束程序的运行. 本信号不能被阻塞、处理和忽略。如果管理员发现某个进程终止不了,可尝试发送这个信号。

10) SIGUSR1
留给用户使用

11) SIGSEGV
试图访问未分配给自己的内存, 或试图往没有写权限的内存地址写数据.

12) SIGUSR2
留给用户使用

13) SIGPIPE
管道破裂。这个信号通常在进程间通信产生,比如采用FIFO(管道)通信的两个进程,读管道没打开或者意外终止就往管道写,写进程会收到SIGPIPE信号。此外用Socket通信的两个进程,写进程在写Socket的时候,读进程已经终止。

14) SIGALRM
时钟定时信号, 计算的是实际的时间或时钟时间. alarm函数使用该信号.

15) SIGTERM
程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出,shell命令kill缺省产生这个信号。如果进程终止不了,我们才会尝试SIGKILL。

17) SIGCHLD
子进程结束时, 父进程会收到这个信号。

如果父进程没有处理这个信号,也没有等待(wait)子进程,子进程虽然终止,但是还会在内核进程表中占有表项,这时的子进程称为僵尸进程。这种情 况我们应该避免(父进程或者忽略SIGCHILD信号,或者捕捉它,或者wait它派生的子进程,或者父进程先终止,这时子进程的终止自动由init进程来接管)。

18) SIGCONT
让一个停止(stopped)的进程继续执行. 本信号不能被阻塞. 可以用一个handler来让程序在由stopped状态变为继续执行时完成特定的工作. 例如, 重新显示提示符...

19) SIGSTOP
停止(stopped)进程的执行. 注意它和terminate以及interrupt的区别:该进程还未结束, 只是暂停执行. 本信号不能被阻塞, 处理或忽略.

20) SIGTSTP
停止进程的运行, 但该信号可以被处理和忽略. 用户键入SUSP字符时(通常是Ctrl-Z)发出这个信号

21) SIGTTIN
当后台作业要从用户终端读数据时, 该作业中的所有进程会收到SIGTTIN信号. 缺省时这些进程会停止执行.

22) SIGTTOU
类似于SIGTTIN, 但在写终端(或修改终端模式)时收到.

23) SIGURG
有"紧急"数据或out-of-band数据到达socket时产生.

24) SIGXCPU
超过CPU时间资源限制. 这个限制可以由getrlimit/setrlimit来读取/改变。

25) SIGXFSZ
当进程企图扩大文件以至于超过文件大小资源限制。

26) SIGVTALRM
虚拟时钟信号. 类似于SIGALRM, 但是计算的是该进程占用的CPU时间.

27) SIGPROF
类似于SIGALRM/SIGVTALRM, 但包括该进程用的CPU时间以及系统调用的时间.

28) SIGWINCH
窗口大小改变时发出.

29) SIGIO
文件描述符准备就绪, 可以开始进行输入/输出操作.

30) SIGPWR
Power failure

31) SIGSYS
非法的系统调用。

在以上列出的信号中,程序不可捕获、阻塞或忽略的信号有:SIGKILL,SIGSTOP
不能恢复至默认动作的信号有:SIGILL,SIGTRAP
默认会导致进程流产的信号有:SIGABRT,SIGBUS,SIGFPE,SIGILL,SIGIOT,SIGQUIT,SIGSEGV,SIGTRAP,SIGXCPU,SIGXFSZ
默认会导致进程退出的信号有:SIGALRM,SIGHUP,SIGINT,SIGKILL,SIGPIPE,SIGPOLL,SIGPROF,SIGSYS,SIGTERM,SIGUSR1,SIGUSR2,SIGVTALRM
默认会导致进程停止的信号有:SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU
默认进程忽略的信号有:SIGCHLD,SIGPWR,SIGURG,SIGWINCH

此外,SIGIO在SVR4是退出,在4.3BSD中是忽略;SIGCONT在进程挂起时是继续,否则是忽略,不能被阻塞

转自:http://blog.csdn.net/yiyeguzhou100/article/details/51316175

关于Linux中的SIGABRT信号相关推荐

  1. linux 信号sigabrt,關於Linux中的SIGABRT信號

    SIGABRT是中止一個程序,它可以被捕捉,但不能被阻塞.處理函數返回后,所有打開的文件描述符將會被關閉,流也會被flush.程序會結束,有可能的話還會core dump. 當程序調用abort(3) ...

  2. linux内核定义的常用信号6,Linux中的信号

    在 Linux 中,理解信号的概念是非常重要的.这是因为,信号被用于通过 Linux 命令行所做的一些常见活动中.例如,每当你按 Ctrl+C 组合键来从命令行终结一个命令的执行,你就使用了信号.每当 ...

  3. linux如何查看wifi信号强弱

    在linux中观察wifi信号强弱,可以通过dBm数值来判断. 现在来看这个所谓的dBm,数值范围在-XX~0之间.这个数越大,信号强度越高. -50dBm~0dBm范围内,恭喜你,你的信号已经好得很 ...

  4. linux中脚本扑捉(trap)信号问题

    linux中脚本扑捉(trap)信号问题 扑捉ctrl+c信号: 1 #!/bin/bash 2 trap "trap" 2; 3 function trap() 4 { 5 ec ...

  5. 【关于Linux中----信号】

    文章目录 一.信号入门 1.1 信号概念 1.2 用 kill-l命令查看信号列表 1.3 信号处理常见方式预览 二.产生信号 2.1 通过终端按键产生信号 2.2 由于程序中存在异常产生信号 2.3 ...

  6. linux守护实例有什么用,linux中的信号及进程守护的应用实例分享

    一.什么是信号? <1>信号是用来向进程通知事件 <2>每个信号已SIG开头,信号名定义在#include 二.进程收到信号,可以做出三种措施 <1>忽略信号 &l ...

  7. linux 信号_[入门]谈一谈Linux中的信号

    也许有一些同学有这样的疑问: kill -9 PID 中的 -9 到底是什么意思? Ctrl + C 是为什么可以停止掉运行的程序? 1. 什么是信号? 在计算机科学中,信号是Unix.类Unix以及 ...

  8. linux 信号sigabrt,程序运行产生SIGABRT信号的原因---转

    程序运行产生SIGABRT信号的原因 发表于2017/2/8 14:53:31  2444人阅读 分类: C++ Linux 编程基础 原文网址: http://m.blog.csdn.net/Sea ...

  9. linux SIGABRT信号

    自己写的程序启动时偶尔会被SIGABRT信号杀死.故查看下SIGABRT的用法. SIGABRT是中止一个程序,它可以被捕捉,但不能被阻塞.处理函数返回后,所有打开的文件描述符将会被关闭,流也会被fl ...

最新文章

  1. tensorflow fetch 取回某个值
  2. AtCoder AGC022E Median Replace (字符串、自动机、贪心、计数)
  3. C# IIS ManagementException: 访问遭到拒绝
  4. [转]ubuntu network is unreachable 解决记
  5. 快手内测10分钟长视频 以吸引更多MCN、用户入驻
  6. 五年级计算机教室使用记录,五年级班会记录.doc
  7. Shell 脚本调用另一个脚本的三种方法
  8. Opencv图像美颜滤镜
  9. php 豆瓣抓取,PHP抓取豆瓣读书爬虫代码
  10. Hive beeline详解
  11. NoSQL之 Redis配置与优化
  12. 谷歌浏览器关闭安全模式, 访问 http网站
  13. java如何避免恶意连续点击_浅谈一下如何避免用户多次点击造成的多次请求
  14. Linux命令——bash
  15. Vue中的@blur/@focus事件
  16. 关于2022年宣城市集成电路布图设计登记有效期及收费相关说明
  17. 4G/5G多卡聚合设备在公安无线传输中的解决方案
  18. ht1621b和单片机电平匹配_HT1621B驱动段码液晶屏参考程序——晶拓液晶屏
  19. linux中服务器互信的原理,linux服务器配置ssh互信(RSA)
  20. H5-soul星球特效

热门文章

  1. DB2数据库认证系列教程——IBM DB2认证考前必备
  2. c语言猜拳游戏石头剪刀布,模拟剪刀石头布猜拳游戏
  3. Web全栈工程师修养
  4. 阿里云虚拟机【yum】命令出现错误
  5. 贝壳CVR转化率预估模型实践
  6. 极简Prometheus监控实战
  7. python第一次考试_python 全栈开发,Day16(函数第一次考试)
  8. 有关php地英语文章,实用英语短句-PHP教程,其它文章
  9. 《经济的律动》徐远(作者)epub+mobi+azw3格式下载
  10. 阿里云产品推荐——云数据库RDS MySQL 版