linux系统编程之信号的介绍

本文介绍了信号相关知识,信号由内核或软件产生,是一种可能有延迟的中断。阐述了信号特点、机制、产生方式、状态、默认处理方式及四要素。还介绍了注册捕捉函数sigaction,以及9、19号信号的特殊规则,同时提及kill和fork函数相关内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

信号的介绍

信号介绍:内核产生,软件产生的中断,可能有延迟,
信号的特点:简单,不能带大量信息,满足特定条件发生
信号的机制:进程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之后的下一条语句执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值