1

簡単なイベント通知システムを探しています:

  1. プロセスAは、通知を受け取るまでブロックします...

  2. プロセスAをトリガーするプロセスB。

Win32でこれを行っている場合は、イベントオブジェクトを使用する可能性があります(「B」がSetEventを実行する場合は「A」ブロック)。私はかなり速くて汚いものが必要です(Cコードよりもスクリプトを好む)。どんなことを提案しますか?ファイルアドバイザリロックについて疑問に思っていますが、面倒なようです。プロセスの1つは、ロックを保持するためにファイルをアクティブに開く必要があります。

4

3 に答える 3

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を開始し、次に別のシェルウィンドウでスクリプトBを繰り返し開始します。

于 2012-10-22T23:31:20.483 に答える
0

fifo以外では、signalとkillを使用して基本的に割り込みを実行し、SIGUSR1のようなシグナルを受信して​​ブロックを解除するまで1つのプロセスをスリープさせることができます(条件変数を使用して、ポーリングなしでこれを簡単に実現できます)。

于 2012-10-22T23:34:57.510 に答える
0

ゆっくりときれいですか?

次に、(名前付きの)セマフォを使用します:POSIXまたはSysV(推奨されませんが、おそらく少し移植性が高くなります)。プロセスAはsem_wait(またはsem_timedwait)を実行し、プロセスBはを呼び出しますsem_post

于 2012-10-23T01:51:59.663 に答える