Linux Signal (7): sigaction

原创 2007年09月27日 17:02:00

sigaction函数是用作检查/修改与指定信号相关联的处理动作. 在UNIX早期版本中使用signal, 后来改用了sigaction, 可见它的功能比signal要强大. 另外, signal函数也是可以用sigaction实现的.

1. sigaction原型:

#include <signal.h>

int sigaction(int signo, const struct sigaction *restrict act, 
                               struct sigaction *restrict oact);

成功则返回0, 出错则返回
-1.

首先说一下struct sigaction这个结构:

struct sigaction
{
    
void (*sa_handler)(int); /* addr of signal handler or 
                                SIG_IGN, SIG_DFL */
    sigset_t sa_mask;       
/* additional signals to block */
    
int sa_flags;            /* signal options */

    
/* alternate handler */
    
void (*sa_sigaction)(int, siginfo_t *void *);
};
  • sa_hanlder: 一个带有int参数的函数指针, 或者SIG_IGN(忽略), 或者SIG_DFL(默认).
  • sa_mask: 信号屏蔽字(集). 当该信号处理函数返回时, 屏蔽字恢复.
  • sa_sigaction: 替代的信号处理程序, 当使用了SA_SIGINFO标志时, 使用该信号处理程序.

对于sa_flags和siginfo结构, 具体参考APUE 262页.

2. 实例:

用sigaction实现signal:

typedef void (*sig_func)(int);

sig_func 
*signal(int signo, sig_func *
func);
{
    
struct
 sigaction act, oact;

    act.sa_handler 
=
 func;
    sigemptyset(
&
act.sa_mask);
    act.sa_flags 
= 0
;

    
if (sigaction(signo, &act, &oact) < 0
)
        
return
 SIG_ERR;

    
return
 oact.sa_hanlder;
}

NDK 编译armebai-v7a的非4字节对齐crash Fatal signal 7 (SIGSEGV) 错误解决

一直都是编译armabi的,没有任何问题,这个架构是软件模拟浮点运算的。 后来看到NDK文档上说armabi-v7a是针对有硬件处理浮点计算的arm cpu的。 于是就修改配置编译armebai-v7...
  • tom_221x
  • tom_221x
  • 2015年07月08日 14:28
  • 1321

源码剖析signal和sigaction的区别

这两个函数都是Linux下注册信号处理函数有关,但是它们的区别一般我们都是从书上、网上、man手册得知,要想对它们的区别了然于胸,源码剖析才是彻底的方法。 先来看这两个函数的区别和实验: 1、sign...
  • wangzuxi
  • wangzuxi
  • 2015年04月01日 22:08
  • 2827

linux之信号处理函数signal和sigaction

signal回调函数绑定信号(signal)是一种软件中断,它提供了一种处理异步事件的方法,也是进程间惟一的异步通信方式。那么我们很多场景下,需要对不同的信号进行捕获并做出响应操作。 在linux上...
  • to_be_better
  • to_be_better
  • 2016年11月22日 03:20
  • 834

Linux信号(signal、sigaction) 机制分析

【摘要】本文分析了Linux内核对于信号的实现机制和应用层的相关处理。首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理。接着分析了内核对于信号的处理流程包括信号的触发/注册/执...
  • lee244868149
  • lee244868149
  • 2014年08月20日 18:44
  • 1395

linux进程信号处理函数signal和sigaction

Linux中signal函数说明: NAME        signal - ANSI C signal handling SYNOPSIS        #include        t...
  • u010827484
  • u010827484
  • 2015年08月21日 23:18
  • 1937

为什么使用sigaction而非signal

所以希望能用相同方式处理信号的多次出现,最好用sigaction.信号只出现并处理一次,可以用signal.   signal函数每次设置具体的信号处理函数(非SIG_IGN)只能生效一次,每次在...
  • suifengpiao_2011
  • suifengpiao_2011
  • 2016年07月06日 12:15
  • 891

linux信号机制之sigaction结构体浅析,signal 函数,信号捕捉

来自:http://hi.baidu.com/phenix_yw/blog/item/6eb4ca391d1479f23a87ce19.html 信号安装函数sigaction(int signum,...
  • lanmanck
  • lanmanck
  • 2009年09月19日 09:17
  • 24695

linux signal, sigaction.sa_mask, sigwait的区别

signal函数重定向信号的处理函数,默认为阻塞(BLOCK)模式,就是说在运行一个信号的处理函数时,再收到同样的信号,将直接被阻塞,而不是再次立即调用处理函数(不允许中断嵌套)。 sigacti...
  • finuxz
  • finuxz
  • 2017年02月10日 16:04
  • 304

sigaction函数和signal函数

signal和sigaction的区别: signal都是指以前的older signal函数,现在大多系统都用sigaction重新实现了signal函数。 1.      signal在调用h...
  • jisuanji2121
  • jisuanji2121
  • 2013年03月13日 16:36
  • 3692

linux sigaction函数(注册信号)使用

int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);sigaction函数的功能是检查或修...
  • u011641885
  • u011641885
  • 2015年08月03日 17:47
  • 1020
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux Signal (7): sigaction
举报原因:
原因补充:

(最多只允许输入30个字)