![](/img/trans.png)
[英]Can I use non-blocking sockets to send FDs from one process to another using “sendmsg/recvmsg”?
[英]In Linux, I'm looking for a way for one process to signal another, with blocking
我正在寻找一个简单的事件通知系统:
进程A阻塞,直到得到...的通知
流程B,触发流程A。
如果我在Win32中执行此操作,则可能会使用事件对象(“ B”执行SetEvent时使用“ A”块)。 我需要一些快速而又肮脏的东西(最好是脚本而不是C代码)。 您会建议什么样的事情? 我想知道文件咨询锁,但看起来很乱。 进程之一必须主动打开文件才能持有锁。
又快又脏?
然后使用fifo 。 这是一个命名管道。 进程A从具有阻塞模式的fifo FD读取。 进程B在需要时向其写入。
确实如此。
这是bash脚本实现:
程序A:
#!/bin/bash
mkfifo /tmp/event
while read -n 1 </tmp/event; do
echo "got message";
done
程式B:
#!/bin/bash
echo -n "G" >>/tmp/event
首先启动脚本A,然后在另一个外壳程序窗口中重复启动脚本B。
除了fifo之外,您还可以使用信号和kill来进行中断,并使一个进程进入睡眠状态,直到它收到诸如SIGUSR1之类的信号,然后将其解除阻塞(您可以使用条件变量轻松实现此目的而无需轮询)。
慢又干净?
然后使用(命名)信号灯:POSIX或SysV(不建议使用,但可能更便于携带)。 进程A执行sem_wait
(或sem_timedwait
),进程B调用sem_post
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.