设为首页 加入收藏

TOP

POSIX(Portable Operating System Interface )信号处理
2014-11-24 08:22:39 来源: 作者: 【 】 浏览:2
Tags:POSIX Portable Operating System Interface 信号处理

信号(signal)就是可知某个进程发生了某个事件的通知,有时也称为软件中断(software interruption)。


信号通常是异步发生的。


信号可以:


*由一个进程发给另一个进程(或自身)


*由内核发给某个进程


每个信号都有一个与之关联的处置(disposition),也称为行为(action)。


通过sigaction函数来设定一个信号的处置,有三种选择:


(1)信号发生时调用信号处理函数(signal handler),即捕获(catching)信号,


其中,SIGKILL,SIGSTOP两个信号无法被捕捉。


函数原型:void handler(int signo);
(2)通过设置信号处理办法为SIG_ING来忽略信号,


其中,SIGKILL,SIGSTOP无法被忽略。
(3)通过设置信号处理办法为SIG_DFL来设置信号的默认处置方法,


默认处置通常是早收到信号后终止进程,个别信号的默认处置是忽略。


建立信号处置的POSIX方法就是调用sigaction函数。简单的方法是用signal函数,它的第一个参数是信号名,第二个参数是指向函数的指针或为常值SIG_DFL或SIG_IGN。


由于历史原因,signal在各种平台上的实现可能会不尽相同,而POSIX明确规定调用sigaction函数的语义,但sigaction函数调用往往比较复杂,解决方法是用sigaction实现自己的signal函数,signal函数原型:


void (*signal(int signo, void (*handle)(int)))(int);


其中signal接受两个参数,一个int型的信号编码,另一个处理信号的函数指针,


然后返回一个之前定义的处理信号的函数的指针,处理函数接受一个int型参数,返回void,这样看起来挺麻烦的,简单点可以这样定义:


typdef void (SIG_HANDLE)(int);
SIG_HANDLE *signal(int, SIG_HANDLE *);


好了,知道了signal的基本语义了,现在可以用sigaction实现它了,代码如下:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Python调用C库的实现 下一篇Linux DM9000网卡驱动程序完全分析

评论

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

·微服务 Spring Boot (2025-12-26 18:20:10)
·如何调整 Redis 内存 (2025-12-26 18:20:07)
·MySQL 数据类型:从 (2025-12-26 18:20:03)
·Linux Shell脚本教程 (2025-12-26 17:51:10)
·Qt教程,Qt5编程入门 (2025-12-26 17:51:07)