Linux编程-信号

本文最后更新于:1 年前

信号名称定义在signal.h中,相当于软中断。

常用信号如下:

信号总览:(31号前为不可靠信号,34号以后为可靠信号)

信号绑定示例:

struct sigaction 结构体

1
2
3
4
5
6
7
struct sigaction {
void (*sa_handler)(int);
void (*sa_sigaction)(int, siginfo_t *, void *);
sigset_t sa_mask;
int sa_flags;
void (*sa_restorer)(void); //废弃数据域,不要使用
}
  • sa_handler 是信号处理函数

  • sa_sigaction 也是信号处理函数,有三个参数,可以获得关于信号的更详细的信息

  • sa_mask 用来设置在处理该信号时暂时将sa_mask 指定的信号集搁置

  • sa_flags 用来设置信号处理的其他相关操作,下列的数值可用。

    • SA_SIGINFO:使用 sa_sigaction 成员而不是 sa_handler 作为信号处理函数。
    • SA_RESETHAND:当调用信号处理函数时,将信号的处理函数重置为缺省值SIG_DFL
    • SA_RESTART:如果信号中断了进程的某个系统调用,则系统自动启动该系统调用
    • SA_NODEFER :一般情况下, 当信号处理函数运行时,内核将阻塞该给定信号。但是如果设置了 SA_NODEFER标记, 那么在该信号处理函数运行时,内核将不会阻塞该信号
    • SA_NOCLDSTOP:使父进程在它的子进程暂停或继续运行时不会收到 SIGCHLD 信号
    • SA_NOCLDWAIT:使父进程在它的子进程退出时不会收到 SIGCHLD 信号,这时子进程如果退出也不会成为僵尸进程。