关于标准信号的传递

如何解决关于标准信号的传递

|   相反,如果多个实例   标准信号是              在该信号当前被阻止的情况下传送,则只有一个   实例已排队。 我认为上面的描述不太清楚,并引起了我的歧义: 如果未阻止特定信号怎么办,同一信号的多个实例是否会排队? 信号在哪里排队,是过程的特定位置还是全局位置? 如何处理排队的信号,是否有可能同时处理两个信号,或者保证信号将被一个接一个地处理? 所以这里实际上是3个问题。     

解决方法

           如果未阻止特定信号怎么办,同一信号的多个实例是否会排队? 这取决于是否已使用
sigaction
结构和
sigaction()
函数为信号设置了SA_SIGINFO标志,以及您的系统是否具有针对_POSIX_REALTIME_SIGNALS的有效定义(现代Linux内核具有此定义)。如果两个实例都为真,则符合这两个条件的所有到达信号都将在每个进程队列中排队,直到它们被传递或接受,直到操作系统对给定信号中的项目数施加限制为止。的队列。在那之后,任何其他到达该信号类型的信号都将被丢弃。 如果这些情况中的任何一种都不成立,则仅处理当前到达的信号,并且丢弃在当前信号处理程序运行时到达的具有相同信号类型的任何其他信号。同样,如果您正在阻止信号,并且两个或多个信号到达该过程并且没有传递,则它们会合并在一起成为一个信号事件。但是同样,这仅在不满足以上两个条件的情况下……否则,将相同类型的多个信号事件排队。 还要注意一点...陈述的两个条件是针对POSIX规范的,但是Linux将对任何实时信号进行排队,即使未为该信号设置SA_SIGINFO。因此,这意味着对应于范围SIGRTMIN和SIGRTMAX的任何信号。   信号在哪里排队,是过程的特定位置还是全局位置? 它存储在每个进程的队列中。   排队信号如何处理,   是否有可能两个信号   在同一时间处理   时间,否则它的保证信号会   一一处理? 这取决于如何使用“ 0”结构和“ 1”功能设置信号处理程序。不保证在信号处理程序运行时会阻止其他任何信号。可以在“ 0”结构中设置一个信号掩码,以确定在信号处理程序运行时哪些信号被阻止。信号本身会被阻塞,直到信号处理程序完成为止,但是如果您的“ 0”结构中设置的信号处理程序未设置信号屏蔽,则其他信号会中断您当前的信号处理程序。因此,您在信号处理程序中所做的任何事情都应该是异步安全的,并且不应在信号处理程序中调用任何非异步安全的函数,例如
fprintf()
等。因此,可以确保信号本身以FIFO顺序处理(也就是说,一个信号不会自身中断),但是如果您没有故意阻止其他信号,则其他信号会中断您当前的信号处理程序。请记住,在信号处理程序中设置信号掩码以阻止其他信号中断您的处理程序是一个非常糟糕的主意,并且不是原子操作,因此请不要这样做。如果要在信号处理程序运行时阻止其他信号,请在传递给
sigaction()
sigaction
结构中提供一个信号掩码。     ,这是一个位掩码-请注意,标准信号的值都在
32
以下吗? 编辑0: 标准信号的“队列”只是每个线程的位掩码,因此一旦发布信号但尚未传递给定的位,则设置该位,并且发布相同的信号将丢失,直到该位被清除为止,即信号为已交付。 编辑1: 我们可以可靠地获得子进程,因为该机制不仅仅依赖于信号。内核会保留有关进程祖先的详细信息,子进程一旦退出就不会消失,而是留在进程表中供父级收获(这就是我们繁殖僵尸的方式,对:)。等待ѭ10意味着“您的至少一个孩子改变了状态,浸入内核以收集尸体”。这里的争夺不是在信号“ queue”上,而是在进程表/树/任何东西上,这是内核保护它的工作。     ,        每个线程一次处理一个信号。信号处理程序运行时,所有其他信号将自动被阻止。 因此,不可能将多个相同信号排队到单个线程中。但是,许多不同的信号可能会出现在队列中。 我认为信号处理程序有可能在退出之前解除对某些信号的阻塞,在这种情况下,如果生成信号,您将冒信号栈(用于信号处理程序的调用栈,而不是信号队列)溢出的风险。比处理速度快。     ,        如果在处理同一信号时传递了信号,则将在从当前调用返回后立即再次调用处理程序,因此将有多个信号传递。 当然,如果在处理第一个信号的同时多次发送信号,则只有一个信号会排队,并且只会发生一个重复的处理程序调用。 信号在内核的proc结构中被标记为\“ pending \”,因此每个进程都有单独的信号位掩码,并且每种信号(SIGBUS,SIGINT,SIGUSR1等)只能处于待处理状态,但是可能有多个不同的信号处于待处理状态同时。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res