[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[linux-users:99653] プロセス間通信(シグナル)


コバヤシ@Linux暦1年 と申します。

プロセス間通信について質問があります。

<開発環境>
Red Hat 7.3にてCを使用。

"プロセスA,B,C"という3つのプログラムがありまして、
各々のプロセスはとある状態になると、
共通の処理である"プロセスD"へ処理要求を出し、
要求を受けたプロセスDが処理を始める、ということをしています。

現状ではプロセスA,B,CとDの間ではメッセージの送受信にて
やりとりしていますが、これでは処理の同期は一応とれますが、
メッセージの送受信において、常にメッセージの監視を行っているので、
CPUに負荷がかかっています(微々たるものかもしれませんが)。

そこで最近シグナルなるものを知りまして、これを使って作ってみました。

<プロセスD>
signal(SIGUSR1,hogehoge)
pause();
〜
int hogehoge()
{
 (共通の処理)
}

<プロセスA,B,C>
共通処理要求時にkill(プロセスDのpid,SIGUSR1)を行う


ただ、問題がありまして、プロセスA,B,Cはそれぞれ別々に
動作している為、プロセスDに処理要求をだすのが不定期かつ
同時も考えられます。(つまり同一シグナルが3つ)
確か同一シグナルの場合は1つの処理中にブロックできるシグナルは
1つで、以降のものは無視されてしまいます。
ユーザ定義IDの2つ目を使えば(signal(SIGUSR2,hogehoge)のように...)
なんとかなるような気もしますが、今後処理要求が増加したら
別の方法をとらなければならないのでは、と思い困っています。

要するに
 ・クライアント/サーバのような動作
 ・各クライアントの同時に起こりうる処理を全て待機させる
 ・極力ループを使用しない

ということがやりたいのです。
正直シグナルにこだわっている訳ではなく、パイプ(FIFO)でも、メッセージでも
いいのですが、どういった方法が最適なのかが判断できません。

もし皆さんの中でこういった処理のノウハウをお持ちの方がおりましたら
ご教授頂けますか?
よろしくお願い致します。

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
Follow-Ups: