1

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

  1. 处理 A 阻塞,直到它得到通知...

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

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

4

3 回答 3

5

又快又脏?

然后使用fifo。它是一个命名管道。进程A以阻塞模式从fifo的FD中读取。进程 B 在需要时写入它。

确实很简单。

这是 bash 脚本实现:

方案一:

#!/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。

于 2012-10-22T23:31:20.483 回答
0

又慢又干净?

然后使用(命名)信号量:POSIX 或 SysV(不推荐,但可能更便携)。进程 A 执行 a sem_wait(or sem_timedwait) 并且进程 B 调用sem_post

于 2012-10-23T01:51:59.663 回答
0

除了 fifo 之外,您还可以使用 signal 和 kill 来进行中断并让一个进程休眠,直到它接收到像 SIGUSR1 这样的信号,然后解除阻塞(您可以使用条件变量轻松实现此目的而无需轮询)。

于 2012-10-22T23:34:57.510 回答