设为首页 加入收藏

TOP

Linux 程序信号处理(一)
2014-11-24 08:20:28 来源: 作者: 【 】 浏览:5
Tags:Linux 程序 信号处理

Linux下的信号名以SIG开头,如:SIGSEGV 段错误、SIGTERM 退出 等等,它们都在头文件中定义信号名和对应的值,并且信号的值都大于0。


产生信号的原因:


1.硬件异常:除零出错、无效内存的引用,如SIGSEGV表示进程访问了无效的内存地址


2.软件发送的信号:如SIGPIPE表示进程尝试写入到没有阅读的管道(或socket)时,SIGALRM进程计时器到期


3.用户按下某些终端按键:如按下Ctrl+C,产生SIGINT信号,停止进程,按下Ctrl+Z产生SIGTSTR信号,挂起前台进程组


4.通过Kill命令向特定进程发送信号


5.通过raise函数,向自身发送信号


对于信号的处理也有几种常见的方式:


1.可以忽略信号,除了SIGKILL和SIGSTOP外,其它的信号都可以由程序忽略


2.可以应用信号的默认操作,大多数信号的默认操作是结束进程,比如SIGTERM、SIGPIPE;SIGSEGV的默认操作是触发core dump,产生核心转储文件,便于进行debug


3.可以捕获信号, 比如当接收到SIGTERM时,对程序进行结束前的收尾工作,关闭文件描述符、socket,释放资源,删除临时文件;当接收到SIGCHLD时,调用waitpid获得子进程的PID,并获取它的退出码



常见的信号、说明和默认操作:


SIGABRT 异常终止 coredump


SIGALRM 报警计时器超时 终止


SIGBUS 总线错误 coredump


SIGCANCEL 取消信号 忽略


SIGCHLD 子进程状态改变 忽略


SIGCLD SIGCHLD的别名 忽略


SIGCONT 继续已停止的进程 忽略


SIGEMT 仿真进程陷阱 忽略


SIGFPE 算术异常 coredump


SIGFREEZE 检查点冻结 忽略


SIGHUP 挂断 终止


SIGILL 非法指令 coredump


SIGINT 终端中断字符ctrl+c 终止


SIGIO SIGPOLL的别名 终止


SIGIOT SIGABRT的别名 coredump


SIGKILL 杀死进程 终止


SIGLOST 资源丢失 终止


SIGPIPE 写入没有阅读程序的管道 终止


SIGPOLL 可轮询事件已经发生 终止


SIGPROF 记录计时器到期 终止


SIGPWR 电源失效或重新启动 忽略


SIGQUIT 终端退出字符 coredump


SIGSEGV 段错误 coredump


SIGSTOP 停止 停止进程


SIGSYS 存在错误的系统调用 coredump


SIGTERM 终止进程 终止


SIGTHAW 检查点解冻 忽略


SIGTRAP 跟踪或断点陷阱 coredump


SIGTSTP 终端挂起符ctrl+z 停止进程


SIGTTIN 对控制台的TTY的后台读取 停止进程


SIGTTOU 后台写入控制的TTY 停止进程


SIGURG 紧急套接字条件 忽略


SIGUSR1 用户自定义信号1 终止


SIGUSR2 用户自定义信号2 终止


SIGVTALRM 虚拟计时器报警 终止


SIGWAITING 并发的信号 忽略


SIGWINCH 终端窗口尺寸改变 忽略


SIGXCPU 超出cpu限制 coredump


SIGFSZ 超出文件尺寸限制 coredump


SIGXRES

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇I/O操作上设置超时之alarm闹钟法 下一篇用shell脚本来做fdisk

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Python 数据分析与可 (2025-12-26 21:51:20)
·从零开始学Python之 (2025-12-26 21:51:17)
·超长干货:Python实 (2025-12-26 21:51:14)
·为什么 Java 社区至 (2025-12-26 21:19:10)
·Java多线程阻塞队列 (2025-12-26 21:19:07)