我正在寻找一个简单的事件通知系统:
处理A阻止,直到通知......
进程B,触发进程A.
如果我在Win32中这样做,我可能会使用事件对象('A'块,当'B'执行SetEvent时)。 我需要一些非常快速和脏的东西(更喜欢脚本而不是C代码)。 你会建议什么样的东西?我想知道文件咨询锁,但它似乎很乱。其中一个进程必须主动打开文件才能保持锁定。
答案 0 :(得分:5)
快又脏吗?
然后使用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,然后在另一个shell窗口中重复启动脚本B.
答案 1 :(得分:0)
除了fifo,你可以使用signal和kill来基本上做中断并让一个进程休眠,直到收到SIGUSR1这样的信号然后解除阻塞它(你可以使用条件变量来轻松实现这一点而无需轮询)。
答案 2 :(得分:0)
缓慢干净?
然后使用(命名)信号量:POSIX或SysV(不推荐,但可能稍微更便携)。流程A执行sem_wait
(或sem_timedwait
)和流程B调用sem_post
。