繁体   English   中英

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

[英]What happened when a waiting process (in semaphore queue) receives a signal from another process?

我正在做一个学校项目:我必须管理许多流程。 在它们由父级(wht fork())生成并使用 execve 启动后,它们必须相互通信并且它们工作得很好。 该项目包括2个文件。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)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM