c - 当等待进程(在信号量队列中)接收到来自另一个进程的信号时会发生什么?
问题描述
我正在做一个学校项目:我必须管理许多流程。在它们由父级(wht fork())生成并使用 execve 启动后,它们必须相互通信并且它们工作得很好。该项目包括2个files.c,一个是父亲(创建孩子),另一个是孩子的代码。当我有许多想要访问关键部分的排队和等待进程(我决定在其中实现互斥信号量)时,就会出现问题
代码类似于:
decrease_semaphore
//start critical section
kill(pid,signal) /*try to send a signal to a probably queuing process at the same semaphore*/
increase_semaphore
//end of critical section
发送的信号由我编写的处理程序捕获。
那么,信号发送到的排队过程会发生什么?他是否收到它并离开等待队列,执行处理程序?
还是它留在队列中并在它设法访问关键部分后执行处理程序?
抱歉有任何不准确之处,我最近开始用 c 写 :)
解决方案
如果您正在使用“sem_wait”,并且接收到信号(并且未被阻塞),则 sem_wait 将返回 -1 并将 errno 设置为 EINTR。这可用于区分其他故障(例如,ETIMEDOUT)。
推荐阅读
- php - PHP http_response_code($code) 在完全错误的 if 语句中执行
- google-cloud-platform - 我可以为多区域 GKE 集群配置 Google 全局负载均衡器吗
- linux - UBoot 中的错误“将环境保存到 MMC...写入 MMC(0)...失败失败 (1)”
- nightwatch.js - Nightwatch.JS Vercel 集成
- javascript - 使用 Jest/Enzyme 测试拖放事件监听器
- codenameone - Can an iOS native interface use NSData (byte[]) as a parameter or return value?
- google-sheets-api - 我的 Google Sheets API 控制台有重复的窗格
- sql - Postgresql 12 触发器更新与动态 SQL EXECUTE
- node.js - Meteor.loginWithPassword 不适用于带有 @ 字符的用户名
- sed - 使用前一行的缩进添加新行