10.20 sigqueue函数

10.8节中我们讲到许多UNIX系统并不支持信号的排队,随着POSIX.1增加了实时扩展,一些系统开始支持信号队列,在SUSv4中,信号队列功能已经从实时扩展中移到了基本规范中了。

通常来说,一个信号只能携带一个bit的信息:即是信号本身。除了排队的信号之外,这些扩展还允许应用程序在信号发送的同时传递更多的信息,这些信息被嵌入到了一个siginfo结构中,连同系统提供的信息一起,应用程序可以传递一个整数或者是一个指针来包含更多的信息给信号处理函数。

为了使用队列化的信号,我们必须按照如下步骤执行:

  1. 在我们使用sigaction函数安装信号处理函数的时候,我们必须指定标识SA_SIGINFO.如果我们不指定这一标识,那么信号在被发出的时候,是否被排队就是由系统实现决定的了。
  2. 在sigaction结构成员sa_sigaction中提供信号处理函数,而不是在通常的sa_handler数据域。
  3. 使用sigqueue函数来发送信号。
  1. #include <signal.h>
  2. int sigqueue(pid_t pid, int signo, const union sigval vaue);
  3. Return:0 if OK, -1 on error.

sigqueue函数与函数kill相似,除了我们可以为信号指定一个发送的目标进程,并且我们可以使用参数value来传输一个整数或者是一个指针到信号处理函数。

信号不能无限地排队,在图2.9以及图2.11中我们指出的限制SIGQUEUE_MAX,当该限制被达到的时候,sigqueue就会失败,errno就会被设置为EAGAIN.

增加实时信号以后,一个独立的信号集合被引入到了应用中使用,这些信号的编号位于[SIGRTMIN,SIGRTMAX]之间(包含)。要注意的是这些信号的默认处理时终止进程。

图10.30总结了本书中提到的四个系统实现对于队列化信号的支持差异;

Behavior SUS FreeBSD 8.0 Linux 3.2.0 Mac OS X 10.6.8 Solaris 10
支持sigqueue * * * *
对于SIGRTMIN到SIGRTMAX之外的信号也会队列化处理 可选 * *
即使调用进程没有使用标志SA_SIGINFO也会队列化信号 可选 * *

Figure 10.30 不同平台上的队列化信号的行为

Mac OS X 10.6.8 并不支持实时信号以及sigqueue,在Solaris 10上,sigqueue位于实时库中,librt.

来自为知笔记(Wiz)

时间: 2024-10-09 20:32:23

10.20 sigqueue函数的相关文章

10.14 sigaction函数

函数sigaction允许我们获取或者是修改(或者获取并修改)与特定信号相关联的处理函数,该函数替代了早期的UNIX系统发布版中的函数signal,实际上,在本节末尾,我们将会使用sigaction来实现一个signal函数. #include <signal.h> int sigaction(int signo, const struct sigaction *restrict act, struct sigaction *restrict oact); Returns: 0 if OK,

10.12 sigprocmask函数

在10.8节中我们提到进程的掩码是一个当前阻塞信号发送到进程的信号集合.一个进程可以查看其信号掩码,改变其信号掩码,或者同时执行这两个操作,通过调用函数sigprocmask来实现上述要求. #include <signal.h> int sigprocmask(int how, const sigset_t *restrict set, sigset_t *restrict oset); return:0 if OK, -1 on error. 首先,如果oset是一个非空指针,那么当前进程

Learing-Python【10】:函数初识

一.什么是函数 函数就是代码的一种组织形式,是指将一组语句的集合通过一个名字(函数名)封装起来,要想指向这个函数,只需要调用其函数名即可 函数分为两大类:内置函数 和 自定义函数 二.为何要用函数 减少重复代码 使程序变的可扩展 使程序变得易维护 三.如何用函数 1.原则:函数必须先定义,再调用 1)定义阶段:只检测语法,不执行函数体代码 2)调用阶段:会出发函数体代码的执行 2.定义函数的语法: def 函数名(参数1, 参数2): """ 文档注释 ""

10.19-10.22 iptables规则备份和恢10.20 firewalld的9个zone

10.19 iptables规则备份和恢复 10.20 firewalld的9个zone 10.21 firewalld关于zone的操作 10.22 firewalld关于service的操作 # 10.19 iptables 规则备份和恢复 - 保存和备份iptables 的规则 - service iptables save 会把规则保存到 /etc/sysconfig/iptables - 把iptables规则备份到my.ipt 文件中 - iptables-save > my.ipt

个人回忆录 2014.10.20 至 2015.7.30

时间过的太快.以至于对我来说都记不起来每天做了些什么事情.工作节奏太快,下班.上班 然后再下班再上班. 每天下班后都晚上9点左右.真的看不见日出看不见日落. 从2014.10.20 到现在已经快10个月了.新的工作环境以及新的同事.上司都已熟悉了.回想刚刚开始进入这个研发团队的时候. 高原反应非常强烈,总是在疑问自己为何选择这个方向—C++ 客户端开发.为何不沿用最熟悉的.NET 平台开发.当从新学习一门新技术的时候 才发现自己太笨.有点像当年的高考,时间很紧.因为没有太多的时间用在学习上.MF

分享PHP中的10个实用函数

PHP的功能越来越强大,里面有着非常丰富的内置函数.资深的PHP程序员对它们可能都很熟悉,但很多参加PHP培训的PHP初学者,仍然对一些非常有用的函数不太熟悉.这篇摘抄自兄弟连的文章里,我们就列举10个你或许不了解但实用的PHP函数,供大家参考和学习. 1. php_check_syntax 这个函数可以用来检查特定文件中的PHP语法是否正确. 使用方法: <?php $error_message = ""; $filename = "./php_script.php&

(转自http://www.blogjava.net/moxie/archive/2006/10/20/76375.html)WebWork深入浅出

(转自http://www.blogjava.net/moxie/archive/2006/10/20/76375.html) WebWork深入浅出 本文发表于<开源大本营> 作者:钱安川 前言 本篇文章并没有太多WebWork 的实战代码细节.本人非常希望能充当一名导游的角色,带领读者逐步游览WebWork的功能特性和原理.在第一章,我们将提出基于三层架构的Web层需要解决的10个问题,这是本文的纵轴.围绕着纵轴,我们按照横轴的顺序逐步描述讲解:WebWork简介.WebWork入门.We

从“假如有以下几种价格10,20,50,请你代码实现将他们排序输出”看着设计模式中的策略模式

今天重温了一下策略模式,将自己的一些感悟与大家分享...本人只是技术渣渣,所理解的东西的难免会有很大的局限性甚至是错误,还请各位带着批判的眼光去看待....不喜请勿吐槽 定义:策略模式属于设计模式中的对象行为型模式,它将用到的算法单独抽象成一个单独的类.通常,我们在多个类完成同一件事情,仅仅完成的方式不同时,我们可以考虑使用这种设计模式. 举例:相信,很多人在看到"假如有以下几种价格10,20,50,请你代码实现将他们排序输出"这种题目的时候,很快就写出了以下代码,写之前还不忘了问一下

给你六种面额1 5 10 20 50 100元的纸币假设每种币值的数量足够多

编写程序求组成N元的不同组合的个数.输入一个数字N输出一个也是数字,为组成N的组合个数.如输入2,输出1,输入5,输出2 背包问题: 1 function fn (all) { 2 const arr = [1, 5, 10, 20, 50, 100], 3 len = arr.length, 4 res = []; 5 for (let i = 0; i <= len; i++) { 6 res[i] = []; 7 res[i][0] = 1; 8 } 9 for (let j = 1; j