进程间通信之信号(signal)——信号的传递以及对信号的处理

本文深入探讨了信号的传递过程,从kill函数发送信号开始,经过权限检查,再到信号队列的注册和唤醒进程。接着,重点阐述了信号的处理,包括在内核态到用户态切换时触发的do_signal函数,以及进程对信号的三种响应方式:忽略、默认和自定义处理。下一部分将分析信号处理函数及其在编程中的应用。
摘要由CSDN通过智能技术生成

进程间通信之信号(signal)——信号的传递以及对信号的处理

信号的处理

上一节我们主要整理了信号到底是一个什么东西以及产生信号的四种方法,大致包括终端键盘输入、硬件系统故障、系统函数调用和软件条件。那么通过这四种情况给一个进程发送信号后,信号是如何处理的呢?让我们一起分析一下

信号的传递

信号产生之后,如kill函数向一个进程发送信号。发送信号后,首先通过函数find_task_by_vpid找到该该进程,该函数返回是一个进程的task_struct结构,找到目标进程后,内核检查发送信号的进程是否拥有发送信号的权利,通常使用check_keill_permission函数进行查询;然后传递给函数specific_send_sig_info函数处理:该函数主要功能有三个。第一个是调用函数sig_ignored函数检查信号是否被屏蔽,以免浪费时间;注册信号队列,添加到stck_struct结构中;第三步唤醒随眠总的进程。这样信号就已经发送,但是发送后,但还不会触发信号处理程序。
如图:
在这里插入图片描述

信号的处理

触发信号处理程序是每次有内核态切换到用户状态是,内核都会发起信号队列处理,最终调用do_signal函数。请注意,该函数中handle_signal函数操作进程在用户状态下的栈,使得在从核心态切换到用户状态之后运行信号执行程序。

进程对信号的响应

1、忽略:就是虽然接收到了该信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值