进程间通信(二十三)——信号底层API:sigaction

本文详细介绍了Linux中信号的分类,包括标准信号和实时信号的管理方式。重点讨论了信号处理机制,尤其是不可靠信号和可靠信号的内核管理。此外,文章详述了`sigaction`函数作为信号底层API的功能,如何注册信号处理函数以及其与`signal`函数的区别。最后提到了高级信号函数`sigqueue`,并强调了信号处理中的并发问题和特殊信号SIGKILL与SIGSTOP的特点。

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

信号底层API:sigaction

linux中信号的分类

标准信号及其不可靠性

  • 标准信号
    • 1-31号信号,也叫不可靠信号,继承UNIX信号,采用位图管理
    • 如果同时来相同的信号来不及处理,内核会丢弃掉
  • 实时信号
    • 32~64号信号,是可靠的,采用队列管理
    • 来一次,处理一次,转发一次

信号处理机制

内核对信号的处理

  • A进程向B进程发送一个信号,内核会首先收到信号,然后发给B进程,在发送给B进程之前,内核负责管理这些信号
  • 对于不可靠信号,内核采用位图标记,给该信号分配sigqueue结构体,挂入链表之中,并将位图中的对应位置一;此时若有相同的信号发来,因为对应位已经置一,因此内核会丢弃该信号
  • 对于可靠信号,内核采用队列管理:给该信号分配一个sigqueue结构体,并挂入到链表队列之中
  • 队列中信号的个数也是有限制的,超过默认值,可靠信号也会丢失,也就变得不可靠了。

信号底层API:sigaction

函数底层注册函数

  • 函数原型:int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);

  • 函数功能:给信号设置新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值