sigaction

int sigaction(int sigon,const struct sigaction &restrict act,
            struct sigaction &restrict oact);

sigaction是用来进程接收到某个消息后,改变其行为的。比如一个ctrl+c的信号之类的,和signal类似,但是signal不是标准的,sigaction是标准函数提供的。

signal   todo

sigon是要操作的信号

主要取值

.SIGHUP 当终止一个终端时,内核就把这种信号发送给该终端所控制的所有进程.
.SIGINT 当一个用户按下中断键(ctrl+c)后,内核就向该终端用关联的所有进程发送这个信号.
.SIGQUIT 当用户按下(ctrl+),内核就向该终端用关联的所有进程发送这个信号.
.SIGILL 当一个进程企图执行一条非法指令时,内核就发送这个信号.
.SIGFPE 当产生浮点错误时,内核就发送这个信号.
.SIGKILL 这是一个非常特殊的信号,他可以从一个进程发送到另一个进程,使接收到该信号的进程终止.内核偶然也发送这种信号.
.SIGALRM 当一个定时器到时的时候,内核就发送这个信号.
.SIGSTOP 子进程结束信号.UNIX用它来实现系统调用exit(),wait();

sigaction的结构体

struct sigaction {
    void     (*sa_handler)(int);
    void     (*sa_sigaction)(int, siginfo_t *, void *);
    sigset_t   sa_mask;
    int        sa_flags;
    void     (*sa_restorer)(void);
};
某些情况下前两个函数指针是用union来做的,不要同时指定两个函数

对于该结构体

最后一个sa_restorer是废弃的,已经不使用了。

sa_handler 用来对接收到的sigon信号进行处理,默认是SIG_DFL

下面两个分别表示无返回值的函数指针,指针值分别是0和1,这两个指针值逻辑上讲是实际程序中不可能出现的函数地址值

SIG_DFL 0 默认信号处理函数,ctrl+c默认中断

SIG_IGN 1 忽略信号处理函数,ctrl+c忽略掉中断信号

其他的就是我们自己定义的函数

结构体SA_SIGINFO 如果被定义了,那sa_sigaction 函数指针取代handler接管处理函数。其实两个都是函数指针,区别在于,第一个参数少,只能处理信号量,后面的函数可以更多的添加一些信息,buffer之类的。

sa_mask 指定了在信号处理期间需要被忽略的信号,不能因为ctrl+c信号,就中断了对ctrl+z的信号处理。

sa_flags 按位或进行处理,可以是很多值,具体见linux源码

以下是转过来的,

◆ SA_RESTART:使被信号打断的系统调用自动重新发起。
◆ SA_NOCLDSTOP:使父进程在它的子进程暂停或继续运行时不会收到 SIGCHLD 信号。
◆ SA_NOCLDWAIT:使父进程在它的子进程退出时不会收到 SIGCHLD 信号,这时子进程如果退出也不会成为僵

尸进程。
◆ SA_NODEFER:使对信号的屏蔽无效,即在信号处理函数执行期间仍能发出这个信号。
◆ SA_RESETHAND:信号处理之后重新设置为默认的处理方式。
◆ SA_SIGINFO:使用 sa_sigaction 成员而不是 sa_handler 作为信号处理函数。

http://linux.die.net/man/2/sigaction

http://www.cnblogs.com/wblyuyang/archive/2012/11/13/2768923.html




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值