在Linux中,我正在寻找一种方法,让一个进程通过阻塞来发出信号

时间:2012-10-22 23:16:22

标签: linux events ipc blocking

我正在寻找一个简单的事件通知系统:

  1. 处理A阻止,直到通知......

  2. 进程B,触发进程A.

  3. 如果我在Win32中这样做,我可能会使用事件对象('A'块,当'B'执行SetEvent时)。 我需要一些非常快速和脏的东西(更喜欢脚本而不是C代码)。 你会建议什么样的东西?我想知道文件咨询锁,但它似乎很乱。其中一个进程必须主动打开文件才能保持锁定。

3 个答案:

答案 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