操作系统:10 信号处理

本文详细介绍了操作系统的信号处理机制,包括中断、信号的基本概念,常见的信号类型,信号的来源与处理方式,以及信号捕获、注册、屏蔽等。重点讲解了不同类型的信号处理函数,如忽略、终止进程、捕获并处理,并探讨了如何通过信号进行进程控制,如通过键盘、错误、命令和函数发出信号。此外,还涉及了进程休眠与信号的关系,以及信号集和信号屏蔽的概念,提供了一种更高级的信号处理方式——附带信息的信号处理。

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

基本概念:

    1、中断

        当程序接收到消息后中止了当前正在执行的程序,转而执行其他的任务,等其他任务执行完成后可能再返回继续执行,这种执行模式称为中断执行

        分为硬件中断和软件中断

        硬件中断由外设硬件产生的中断,例如键盘、鼠标都可以产生,可以屏蔽

        软件中断是程序执行了中断指令后产生的中断

    2、信号

        信号是一种软件中断,是由操作系统发出的中断信号,被程序接收后执行相应的操作

    3、常见的信号

        kill -l 显示所有信号

        SIGINT (2)  Ctrl+c  终止

        SIGQUIT(3)  Ctrl+\  终止+core(内存映像 内存崩溃)

        SIGFPE(8)   除0\溢出 终止+core

        SIGKILL(9)  用于杀死进程   终止

        SIGSEGV(11) 非法访问内存   终止

    4、不可靠信号和可靠信号

        建立在早期的信号处理机制上的信号(1-31),称为不可靠信号

            不支持排队机制,可能会丢失信号,如果同一个信号连续发送多次,进程可能只接受到了一次

        建立在新的信号处理机制上的信号(34~64),称为可靠信号

            支持排队机制,如果信号连续发送,也不会丢失

    5、信号的来源

        硬件异常:除0、非法访问内存、使用了未定义的指令、总线错误

        软件异常:通过一些命令、函数产生信号

    6、信号的处理

        ① 忽略

        ② 终止进程

        ③ 终止进程+产生core文件

        ④ 捕获并处理信号(在信号发出前,向内核注册一个信号处理函数,绑定该信号与信号处理函数,当信号发出后,会执行信号处理函数)

信号捕获和注册

    typedef void (*sighandler_t)(int);

    注意:信号处理函数的格式

        参数int表示是导致执行该函数的信号的ID

    sighandler_t signal(int signum, sighandler_t handler);

    功能:向内核提出绑定一个信号处理函数

    signum:信号编号

    handler:信号处理函数函数名

        还可以写成:

        SIG_IGN 忽略处理

        SIG_DFL 按默认方式处理

    返回值:

        返回绑定之前的信号处理函数指针,一般用于记录还原

    注意:有个别操作系统通过signal注册的信号只能执行一次信号处理函数,如果想要持续有效,可以在信号处理函数中再重新signal注册一次

    注意:虽然有些信号可以捕获,但是产生该信号的错误原因(段错误\除0)依旧还在,如果信号处理函数执行完后不终止进程,就会返回到产生错误的位置,导致死循环,正确的操作是保存数据后,终止进程

信号发出的方

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

就酱77叭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值