信号的介绍
信号介绍:内核产生,软件产生的中断,可能有延迟,
信号的特点:简单,不能带大量信息,满足特定条件发生
信号的机制:进程B发送给进程A,内核产生信号,内核处理
信号的产生(内核产生):
• 按键产生 ctrl+c ctrl+z ctrl+\
• 调用函数 kill raise abort
• 定时器alarm , setitimer
• 命令产生 kill
• 硬件异常 段错误,浮点错误,总线错误,SIGPIPE
信号状态:
• 递达 实际执行信号处理的动作
• 未决 信号从产生到递达之间的状态
• 信号阻塞
信号的默认处理方式:
• 忽略
• 默认执行动作
• 捕获
信号的四要素:
• 编号//kill -l 可以产看信号的编号
• 事件
• 名称
• 默认处理动作
○ 忽略
○ 终止
○ 终止+core(核心)
○ 暂停
○ 继续
注册捕捉函数
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);
• signum 捕捉的信号
• act 传入的动作
• oldact 原动作 ,恢复现场
struct sigaction {
void (*sa_handler)(int);//函数指针
void (*sa_sigaction)(int, siginfo_t *, void *);
sigset_t sa_mask;//执行捕捉函数期间,临时屏蔽的信号集
int sa_flags;//一般为0
void (*sa_restorer)(void); //无效
};
补充:
9,19号信号不能捕捉,不能忽略,不能阻塞。
kill函数 int kill(pid_t,int sig);详解 man 2 kill
fork函数之后子进程和父进程都从fork之后的下一条语句执行。