Linux (八)进程信号(信号产生,阻塞信号,捕捉信号)

本文详细介绍了Linux系统中进程信号的基本概念,包括信号的产生(如通过终端按键或系统函数)、阻塞信号的机制以及信号的捕捉与处理。通过实例分析了信号在进程控制中的作用,例如SIGINT、SIGQUIT和SIGALRM等,并讨论了信号处理函数、信号集和sigprocmask等关键概念。

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

信号的基本概念

为了理解信号,举一个我们熟悉的例子
用户输入命令,在shell下启动一个前台进程
用户按下CTRL-C,这个键盘输入产生一个硬件终端
如果CPU当前正在执行这个进程的代码,则该进程的用户空间代码暂停执行,CPU从用户态切换到内核态处理硬件中断
终端驱动程序将CTRL-C解释成一个SIGINT信号,记在该进程的PCB中,当某个时刻要从内核返回到该进程的用户空间代码继续执行之前,首先处理PCB中记录的信号,发现有一个SIGINT信号待处理。而这个信号的默认处理动作是终止进程,所以直接终止进程而不再返回它的用户空间代码执行

其中Ctrl-C产生的信号只能发给前台进程
shell可以同时运行一个前台进程和任意多个后台进程
信号相对于进程的控制流程来说是异步的
用Kill-l就可以查看系统定义的信号列表

产生信号的三种方式
1:通过终端按键产生信号
SIGINT的默认处理动作是终止进程,SIGQUIT的默认处理动作是终止进程并且Core Dump,ulimit 命令改变了shell进程的Resource Limit,当Core Dump的时候我们就可以使用core文件了
我们用gdb-file core.core文件名,就可以直接调试出错误出现在哪里

2:调用系统函数向进程发信号
kill命令是调用kill函数实现的,kill函数可以给一个指定的进程发送指定的信号。raise函数可以给当前程序发送指定的信号

#include<signal.h>
int kill(pid_t pid,int signo);
int raise(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值