繁体   English   中英

在Linux中,我正在寻找一种方法使一个进程发出另一个信号,并带有阻塞

[英]In Linux, I'm looking for a way for one process to signal another, with blocking

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

  1. 进程A阻塞,直到得到...的通知

  2. 流程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.

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