コバヤシです。 としさん、関根さんこんにちは。 関根さんのおっしゃっていた select_tut(2)を先週くらいに発見したものの、 少々理解に苦しみ、そのままにしています。 今回とは別の部分で使用していますので、 これは後で勉強するつもりです。 ---としさん > 「常にメッセージの監視を行なっているので」と言う部分ですが、監視を行 > なっているのは、"プロセスD" の事ですよね?。 > であれば、例えばプロセス間通信にメッセージキューや、ソケットを使って > いるなら、msgrcv() か read() か recv() を呼んでいる(と思しき) > "プロセスD" は、受信データが無ければ、データが来るまで待ち状態になり > ますから、CPU 負荷はかからないはず...と思います。 > > ただ、もしかすると、"プロセスD" では、メッセージの受信だけでなく、何 > か、他の処理も並行して行なう必要があるのでしょうか? おっしゃるとおりです。(説明不足でスミマセン (^ ^; ) 「プロセスA,B,C→処理要求→D→結果→A,B,C」 としていますので、監視は全て行っています。 > もし、そうであるとすると、データが来るまで待ち状態が続くと困りますの > で、受信タイムアウト的な実装を行なう手法があるかと思います。 > > 受信タイムアウトの実装は、いくつか方法がありますが、 > > (1) msgrcv() / read() / recv() の直前に、alarm(TIME-OUT) を呼び出し、 > 指定した秒数後にアラームシグナルを発生させ、msgrcv() / read() / > recv() で errnoが EINTR を返すかチェックする。 > →SIGALRM(アラームシグナル)に対するシグナルハンドラを作る必要 > あり。 > > (2) メッセージの送受信にソケットを使っているなら、select() あるいは > poll() システムコールを使って、タイムアウトまで待つ。 なるほど、アラームシグナルを使う手がありましたか! msgsnd()、msgrcv()を使用していますので、(1)の案でやってみようと思います。 結果は後ほど...
References:
- [linux-users:99653] プロセス間通信(シグナル)Isamu Kobayashi
- [linux-users:99655] Re: プロセス間通信(シグナル)TANAKA _FORZA_ Toshihisa
- Prev by Subject: [linux-users:99661] Re: プロセス間通信(シグナル)
- Next by Subject: [linux-users:99663] Re: [linux-users:99659] Re: プロセス間通信(シグナル)
- Previous by thread: [linux-users:99657] Re: プロセス間通信(シグナル)
- Next by thread: [linux-users:99656] Re: [linux-users:99653] プロセス間通信(シグナル)
- Indexes:[Main][Thread]