c - 当等待进程(在信号量队列中)收到来自另一个进程的信号时会发生什么?

标签 c linux signals fork ipc

我正在做一个学校项目:我必须管理许多流程。当它们由父级(wht fork())生成并使用 execve 启动后,它们必须相互通信并且完美工作。 该项目包括 2 个 files.c,其中一个是父亲(创建 child ),另一个是 child 的代码。 当我有许多排队和等待进程想要访问关键部分(我决定在其中实现互斥信号量)时,就会出现问题

代码类似于:

 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)。

关于c - 当等待进程(在信号量队列中)收到来自另一个进程的信号时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58663333/

相关文章:

c - kill 和 signal 的准确性如何?

c++ - 运行时功能测试、setjmp、longjmp 和信号掩码

C 传递 ‘fread’ 的参数 1 从整数生成指针而不进行强制转换

c - 将指针地址传递给全局变量

c - 通过 RTLD_LAZY 链接的动态库

c - 使用 ualarm 的问题

c - x86 转换为小写程序集

linux - 如何在 curl 上指定 IP 地址?

Linux - 加入两个独立的 SSH 连接

汇编中的 Linux 64 命令行参数