• ベストアンサー

プロセス間通信について

SunOS 5.8上でプロセス間通信を実装するつもりです。 msgsnd(),msgrcv()で実現したいのですが、 メッセージキューの個数は任意に設定できるのでしょうか? 設定可の場合、いくつくらいまで可能なのでしょうか? ご回答、よろしくお願いします。

  • mkob
  • お礼率36% (18/50)

質問者が選んだベストアンサー

  • ベストアンサー
  • Lean
  • ベストアンサー率72% (435/603)
回答No.1

カーネルのチューニング可能なSystem Vメッセージキュー関連のパラメータの中に「作成することができるメッセージキューの最大数(msgsys:msginfo_msgmni)」というものがありそこで設定されている数値まで可能です。 最大値を変更したい場合、/etc/systemに設定を追加再起動する事に変更可能です。 現在の設定値はsysdefコマンドを使用する事により参照可能です。 ○Solaris カーネルのチューンアップ・リファレンスマニュアル  2. Solaris カーネルのチューニング可能パラメータ   System V メッセージキュー   http://docs.sun.com/app/docs/doc/806-7088/6jg035p15?l=ja&a=view

関連するQ&A

  • linuxにてプロセス間通信をメッセージキューに行いたいのですが、

    linuxにてプロセス間通信をメッセージキューに行いたいのですが、 ある条件のときにキューに溜まったメッセージを削除したい場合はどのようにしたらいいでしょうか?

  • プロセス間でのメッセージキュー送信

    Linux初心者です。 あるプロセスが生成したメッセージキューへ、別のプロセスからメッセージキュー送信する場合、キューIDを指定する必要があります。 しかし、Linuxでは仮想メモリを使用しているため、共有メモリにアクセスできないはずで、異なるプロセス間でキューIDを共有する方法がわかりません。。 メッセージキューについて以下のサイトでサンプルプログラムが紹介されていますが、2つのプロセスが親子関係であるため、キューIDを共有できています。 http://linuxmag.sourceforge.jp/Japanese/March2003/article287.shtml そもそも、親子関係がないとプロセス間通信ができないのでしょうか? ご存知の方、よろしくお願いします。

  • 異なるプロセスですでに開かれているキューのオープンができません

    現在、Linux(Suse10.3)の環境でPOSIXのメッセージキューを用いたプロセス間通信のプログラムを作成しています。 mq_openでメッセージキューをオープンしているのですが、 異なるプロセスですでに開かれているキューのオープンができません。 最初にオープンしたキューは受信専用、異なるプロセスでオープンするキューは送信専用です。 errnoを調べましたが、 EACCES("\nキューは存在するが、呼び出し元が指定されたモードでそのキ>ューをオープンする許可を持たない。")となっています。 プロセスAの第3引数についてはmode_t S_IRWXU=0x777;としていますが、この辺りの設定方法がよくわかりません。 例) <プロセスA(プロセスBより先に実行)> msqid = mq_open(   "/sample001", O_RDONLY | O_CREAT, S_IRWXU, &mqattr); cout << "msqid:" << msqid << enld; msqid:3 <プロセスB> mqd = mq_open("/sample001", O_WRONLY); cout << "msqid:" << msqid << enld; msqid:-1 ///////////////////////////////////////////////////////////// //errnoは下記の通りです。 ///////////////////////////////////////////////////////////// EACCES(キューは存在するが、呼び出し元が指定されたモードでそのキ>ューをオープ>ンする許可を持たない。) 何か心当たりはありませんでしょうか?

  • .NETでのプロセス間通信

    初めまして。皆様の知恵をお借りしたく質問させていただきます。 現在VC++.NET2003を使用してのプロセス間通信を行うアプリを作成しています。 プロジェクトはWindowsフォームアプリケーション(.NET)です。 そのときアドレスをパラメータで送れる通信方法を教えていただきたいのです。 とりあえず自分で調べて出てきた通信方法を挙げます。 1.ソケット(TcpListenerとTcpClientを使用のもの) 2.メッセージキュー(MessageQueueを使用のもの) 3.イベント(CEventを使用。.NETで作成できるか不明) 4.メッセージウインド(.NETで作成できるか不明) 5.パイプ(名前付きパイプを使用のもの。.NETで作成できるか不明) 以上のものはアドレスをパラメータとして送れるものでしょうか? 上記1,2に関してはアドレスを送るのではなく単純なバイナリデータですが .NETを使用して作成出来ました。 が、3,4に関しては作成方法がわからず中断しております。 5に関してはまだ調べたばかりでサンプルも作成していません。 また他にもあるようでしたらお教え下さい。 お願い致します。

  • Javaプログラム同士のプロセス間通信について

    Java初心者です。 デーモン化したJavaプログラムとJavaサーブレット間のプロセス間通信を 行いたいと思っていますがどのようにしたものか悩み中です。 ○デーモン化したJavaプログラムは、 1、あるポートからSocket通信でデータを受信し、受信したデータをDBに格納する 2、クライアントからの要求で1で保存したデータを加工して送信 ○サーブレットプログラムでは、 上記のデーモン化プログラムの設定等をブラウザ上から変更できるようにしたいと考えています。 設定とは、例えば受信したデータを全てDBに保存せずに ブラウザから条件を設定できてフィルターするような動作に変更できたり、 また、デーモン化プログラムの動作をブラウザ上から停止、開始できるようにしたいのです。 上記の様な構成の場合にプロセス間通信をする必要があると思いますが、 どの様なプロセス間通信を使えばいいのか悩んでいます。 ほんとうは上記の様な2つのプログラムを1つのプログラムで出来ればいいなぁ~と考えているのですが、、 実現方法が判りません。。 なにか名案はございませんでしょうか? わかりづらい説明でもうしわけございません。 参考になるかわかりませんが、イメージ図を、 <イメージ図> デ  data   開  data    ク ー --------> 発 -------->  ラ タ        中         イ 鯖        鯖         アント          ↑          |          |設定変更          |       管          └--------- 理                   者 よろしくおねがいします。

    • ベストアンサー
    • Java
  • POSIXメッセージとは?

    こんにちわ。 私はSolaris8のC++でプログラミングをしている中級者です。 プロセス間通信の方法として、メッセージキューを使っています。 具体的には、キュー作成(msgget)、送信(msgsnd)、受信(msgrcv)、削除(msgctl)等の関数を使っているのですが、これ以外に「POSIXメッセージ」とかいうメッセージがあると聞きました。 SUNのドキュメントで調べてみたのですが、POSIXとは"Potal Operating System Interface for UNIX"で、まあUNIXベースのOSならみんな使えるような関数と解釈しました。この解釈は正しいでしょうか? そして、私が使用しているmsgXXX関数とどのように違って、どのような利点があるのでしょうか? 具体的には、上記のmsgXXXを実現するために、mq_open(), mq_close, mq_send, mq_receiveを使えば良いというだけのことなのでしょうか? POSIXメッセージとは、何か?また、こうやって使うんだよというような参考になるURLをご存じの方がいらっしゃいましたら、教えてくださいませ。

  • メッセージキューのスレッド間通信 

    linuxは全くの初心者なんですが、仕事でメッセージキューでスレッド間通信をするツールを作成するよう指示を受けたのですが全くわかりません。プロセス間通信をするツールは調べて何とかなったんですが… そもそもスレッド間通信ということがわからず困っていますので、ご教授願います。 簡単ものでいいのでツールについても教えていただけたら幸いです。

  • メッセージキューのFIFOの保証

    Solaris10を使用しています。 プロセスAがメッセージキューXに対してメッセージを投げます。 プロセスBがキューXからメッセージを受け取り、処理をします。 プロセスBは複数プロセス(B-1,B-2・・・)あり、すべてがキューXでメッセージを受け取り処理をします。(A:B=1:多になる) この場合 (1)メッセージキューXのFIFO(先入先出)は普通保証されるでしょうか。 (2)プロセスBはメッセージ取得順にメッセージの割り当てが行われるでしょうか。(つまりB-1が先でB-2が後から取りに行ったらB-1に先にメッセージを渡すのが保証されるかどうか。) (3)上記を行うためには、キューの作成もしくはOSのパラメータの設定が必要か、必要ならどれを設定すればいいか。 よろしくお願いします。

  • msgrcv( )で領域破壊?

    Solaris + Cです。 プロセス間通信でmsgsnd( )、msgrcv( )を使用しています。 プロセスAからmsgsndで送信した際に、送信電文のサイズは32バイトと設定しています。  msgsnd(iQue,&stmsg,32,IPC_NOWAIT ); また、受信するプロセスBでも受信した電文のサイズ(rcvmsgの戻り値)は32バイトと認識しており、受信用のバッファ(下記 gRecv)も32バイト分用意しています。  msgrcv(iMyQue,&gRecv,32,0,MSG_NOERROR); しかし、電文の受信(msgrcv)の前後で確認したところ、受信用に用意しているgRecvのすぐ後ろの領域を破壊していることが判明しました。 ※gRecvの中身にはプロセスAから送信した内容が正しく入っています。 msgrcv,msgsndの使用方法に誤りがあるのでしょうか?

  • 既存プロセスからプロセスのプライマリースレッドIDの取得方法

    いつもお世話になってます。 プロセスに関することで分からないことがあるため、どなたか御教授して下さい。 只今、VC++で開発を行っているのですが、CreateProcess関数を使用して開始したプロセスの情報が、引数で指定したPROCESS_INFORMATIONにプライマリースレッドのハンドルやIDが設定されるのは知っているのですが、現在動作中のプロセスからそのプロセスのプライマリースレッドのIDを取得することは可能でしょうか? 具体的には、動作中のプロセスIDを指定するとそのプロセスのプライマリースレッドに対してPostThreadMessageで任意のメッセージが送れるという仕様です。 対象のプロセスがウィンドウを持っていれば、EnumWindows関数を使用してウィンドウに対してPostMessageができるというのは分かったのですが、今回対象のプロセスがウィンドウを持たない為、上記のようにスレッドに対してメッセージを送るようになっています。 CreateProcess呼び出し時にはスレッドIDが取得できることから、プロセスID、または、プロセスハンドルからスレッドIDが取得できるのではないかなと考えられるんですが。。。。