本系列只是为了研究C语言的头文件,如果signal.h
展开讲感觉就有点跑题了,网上有许多对信号机制的解析,写的都非常好,大家可以搜一些,这里就只对signal
进行记录,以便后续继续学习。
kill -l
就可以看到所以的信号以及对应的编号列表中,编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。不可靠信号和可靠信号的区别在于前者不支持排队,可能会造成信号丢失,而后者不会。
细心的人可能会发现,上图的编号没有32和33,不知道是不是系统保留的信号,不过我在signum.h
里面找到了这两个定义
知道的大神,希望能在下方留言指点
signal函数 系统使用signal
函数来注册信号处理函数,声明如下void (*signal(int signum, void (*handler)(int)))(int);为了方便理解,POSIX进行了如下定义
typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler);可以看到signal
函数有两个参数
signum
指明了所要处理的信号类型,它可以取除了SIGKILL和SIGSTOP外的任何一种信号
handler
有三种选择 SIG_IGN:忽略参数signum所指的信号。 SIG_DFL:恢复参数signum所指信号的处理方法为默认值。 sighandler_t类型的函数指针。
返回值是返回先前的信号处理函数指针,如果有错误则返回SIG_ERR(-1)。
新闻热点
疑难解答