簡體   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