• ベストアンサー

プロセス間通信方法について

複数のマシン(Solaris8)からの情報を1台のマシン(Solaris8)で収集する プログラムを作成したいのですが、rshではセキュリティの関係上使用出来ません。 そこでプロセス間通信を利用したいと考えております。 まず、複数のマシン上に情報収集用のプログラムを置いておき、1台のマシンから パラレルにキックをかけて情報収集が出来ないものかお教え下さい。 名前は知っているのですが、方法がわかりません。 この様にすれば可能ですよとか、事例紹介ページ、規正の製品が有ればお教え下 さい。 よろしくお願い致します。

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

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.3

あなたが知りたい内容はだいたい分かった気がします。 悪いことは言いませんから、まずは、測定プログラムを CGI として実装することを 薦めます。 馬鹿みたいに大きなプログラムじゃない限り、ディスクからのロードなんてたいした オーバヘッドにはなりません。 まずは、CGI として実装してみて、それでも速度に不満があるようであれば、そこで はじめて、そのCGI を、情報収集デーモンにすれば良いでしょう。 後々、プログラムを分離することを念頭において CGI をつくるなら、情報の収集と、 それの出力を別関数として実装しておくことが大事です。 CGI の main() がこんな感じになるように。 int main() {   収集内容 data;   data = 情報収集関数(必要な引数);   情報の出力(data, その他必要な引数);   return 0; } 後で、情報収集関数を別プロセスに移すときには、この関数がそのまま使えますし、 この部分がプロセス間通信になるだけですから。 ★別プロセスに情報収集を分離したときの CGI int main() {   収集内容 data;   収集プロセスの起動取得(必要な引数);   data = 収集を待って情報を取得関数(必要な引数);   情報の出力(data, その他必要な引数);   return 0; } ★情報収集プロセスの main() int main() {   デーモンになるための作法が幾つか…   while(起動の待合わせ) {     pid_t pid;     if ((pid = fork()) == 0) {       収集内容 data;       data = 情報収集関数(必要な引数);       CGIへ収集情報を送信関数(data);       return 0;     }   }   return 0; } という感じになります。 データの待ち合わせをして、ある程度の情報をやり取りする場合のプロセス間通信には メッセージキューが向いてます。msgget(), msgsnd(), msgrcv() といったシステム コールを使います。 > 基礎が全くわかっておりません。簡単な例で結構ですのでお教え下さい。 > 本来であれば、この程度の人間がご質問すること自体間違っていることは > 承知しております。 ここは、分からない人が質問するサイトですから、質問すること自体は間違ってない んですが、それなりに書くことがあるので、「簡単な例」といわれても書くのが 面倒なんです (^^;

SpeedStep
質問者

お礼

どうも有難う御座いました。大変参考になりました。 又、質問した時にはお助け下さい。<-すぐ質問してしまうかも知れませんが。

その他の回答 (2)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

client は WEB ブラウザなんですか? > 応答性も考慮する必要があります。このプログラムを常駐させておくとした > 場合、どのような方法があるのでしようか。 だから、質問に「プロセス間通信」と題をうったのですね。 ディスクからのロードが待てないくらい大きなプログラムなんですか? ひとつの方法は、プログラムを /tmp や /var/tmp のようなメモリファイルシステム に配置しておくことですね。 もうひとつは、CGI と daemon になって待ち構えている測定プログラムで プロセス間通信をすることですね。 # これを聞きたかったのかな? 具体的に何が分からないんでしょう? ・デーモンの作り方が分からない ・プロセス間通信というものが分からない ・プロセス間通信の種類くらいは知っているが、実際にプログラムを組んだことがない > このプログラムも複数の管理端末から同時にアクセスされる可能性もあり アクセスが有るたびに、fork() で、測定プログラムの子プロセスを起こせば良い だけの話だと思うんですが…

SpeedStep
質問者

補足

お返事有難うございます。 >もうひとつは、CGI と daemon になって待ち構えている測定プログラムで >プロセス間通信をすることですね。 その通りです。ご説明の仕方が悪く申し訳ありませんでした。 >・デーモンの作り方が分からない >・プロセス間通信というものが分からない >アクセスが有るたびに、fork() で、測定プログラムの子プロセスを起こせば良いだけの話だと思うんですが… 基礎が全くわかっておりません。簡単な例で結構ですのでお教え下さい。 本来であれば、この程度の人間がご質問すること自体間違っていることは 承知しております。 よろしくお願い致します。

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

> まず、複数のマシン上に情報収集用のプログラムを置いておき、1台のマシンから > パラレルにキックをかけて情報収集が出来ないものかお教え下さい。 socket 通信のように、情報収集する側でプログラムを立ち上げておきたくない、と いうことなのでしょうか? 情報を集める複数のマシンに何が入っているのか知りませんが、HTTP で CGI を 起動する、というのでは駄目ですか? あと、 > rshではセキュリティの関係上使用出来ません。 が、どこまでを問題にしているか、によりますが ssh を使う、という手もありますね(→参考URL)。

参考URL:
http://www-ccce.kek.jp/People/yashiro/Rep.euc/KEKint00-01/
SpeedStep
質問者

補足

早速のお返事有難うござます。 おっしゃる通りのことを実現したいのです。 Web画面(管理端末)から、対象となるホスト(複数の場合有り)を指定し サブミットすることにより、対象となるホストに置いてあるプログラム (情報収集用)を起動させ、結果を管理端末画面に表示するというものです。 このプログラムも複数の管理端末から同時にアクセスされる可能性もあり 応答性も考慮する必要があります。このプログラムを常駐させておくとした 場合、どのような方法があるのでしようか。 よろしくお願い致します。

関連するQ&A

  • httpdの子プロセスがゾンビ化する原因

    httpdは複数の子プロセスを生成しますが、この子プロセスがゾンビプロセス化してしまう ことがあります。 このゾンビ化してしまう原因として考えられるものを教えて下さい。 『何らかの理由で子プロセスが停止せずに親プロセスが停止した』等、あいまいな答えでも 構いません。もちろん具体的であれば、とても助かりますが…。 思いつく限りいくつでも構いませんので、教えて下さい。 ちなみに、私が使用しているマシンで上記現象が発生している訳ではなく、一般的な事例として 子プロセスのゾンビ化の原因になり得る事象を知りたいと思っていますので、構成情報などは あまり気にせずに答えて頂けると幸いです。 よろしくお願いします。

  • ソケット通信

    現在プロセス間通信について学んでおり、 今はソケットを使ったプロセス間通信のプログラムを書いています。 そのソケット通信での質問なのですが、 2台のパソコンでINETドメインのソケットを使って プログラムを書いているのですが、 サーバーを実行した後、 別のパソコンでサーバー側のパソコンのIPアドレスを指定して クライアントを実行しようとすると、 connect:Connection timedout と表示されて実行できません。 同じプログラムをUNIXドメインで 1台のパソコンで実行すると正しく実行できます。 これは、プログラムに問題があるのでしょうか? それとも、ソケット通信を行う際には 何かパソコン等の設定が必要なのでしょうか? 教えてください。お願いします。 あと、セマフォを用いたプロセス間通信のサンプルプログラムが のっているホームページなどご存知でしたら、 教えていただけるとありがたいです。

  • ソケット通信について

    VC++6.0MFCでソケット通信のプログラムを作成しようとしています。勉強始めたばかりなので、やっと普通に通信するプログラムは理解できたところです。 そこで応用していろいろ考えているのですが、方法がわからないところがありますので教えていただければと思ってます。 サーバ側の接続待ちはいつでも受けれるようにして、接続してきたクライアントに対して送信したいと考えております。ソケットの接続情報を保持しておいて、別プロセスの送信プログラムが接続クライアントに対して送信したいと考えてます。その送信プログラムが複数ある場合も同じ接続情報を利用したいと考えてるのですが、可能でしょうか。 説明が下手で申し訳ありません。補足はいたしますので、アドバイスお願いいたします。

  • winsockを使った通信方法

    winsockを使った通信でサーバークライアント方式の通信プログラムで クライアントプログラムがサーバープログラムに接続して、 クライアントプログラムで移動あった時のみ サーバーに現在の位置情報を送信し、サーバープログラムが他の参加者に 送信するという通信方式で通信を行っています。 この方法だと接続者が複数人の場合、一人だけ移動していると普通に通信でき位置情報の更新 も出来るのですが、 同時に移動が起こると、モデルが勝手に移動してクライアントプログラムに触れなくなってしまいます。 これを避けるにはどうしたらいいでしょうか?

  • プロセス異常

    windows XP pro SP2 にてマシン立上げ時、リソース不足になりWindowsタスクマネージャにてプロセスを確認すると、iexplore.exe が30個ぐらい勝手に動いています。画面が出るわけでもありません。スパイウエアやウイルスに関係するのでしょうか。また、EXCLE.EXEも複数立ち上がっている場合もあります。 その他セキュリティ関連ソフトは ウイルスセキュリティ2006 Spy-SCAN proは起動済み

  • MRTG で複数台のサーバ情報を扱いたい

    Solaris10サーバを10数台使用するのですが、CPU負荷やメモリ消費量などをモニタしようと考えています。 Solaris10標準のSNMPで情報は収集できそうで、モニタもWebから参照する事を考えMRTGが手頃かなと考えています。 ひとまず、MRTGの設定方法などを検索してみたところ、1台のサーバ上でSolaris情報をSNMPから取ってきてWeb上にグラフ化する流れはわかったのですが複数台のサーバ上から1台のMRTGが収集してWeb上にグラフ化する方法がわかりません。cfgファイルにターゲットのコミュニティを記載すると言う事は複数台のサーバ分cfgファイルを作成するのか、1つのcfgファイルに複数台分定義するのか?それとも違う方法があるのかと言ったところが判りません。 ご存知の方がいらっしゃったらご指南ください。

  • シェル(foreachを利用した)教えて

    Foreachを使ったシェルの作成について教えて下さい。 全くの初心者です。 何台かのサーバ(Solaris)のバージョンをリモートログインして 情報を収集したいのです。 .rhostsファイルに設定しているのでパスワード入力は省略できます。 Foreachを使用して、かなり無理やりですが、こんな感じかと つなぎ合わせてみたのですが・・・・ Foreach H (`192.168.3.2`|`192.168.3.9`) echo ${H},rsh ${H} ’uname -a’ | 収集したいことは 数台あるサーバへリモートログイン(192・・適当なアドレスです) して uname -aコマンドのバージョン情報と 取得したアドレスを 一覧表示したいのですが・・・ シェルも初心者なので、すみません 教えて下さい。 収得した結果一覧 アドレス   バージョン 192.168.3.2   10

    • ベストアンサー
    • PHP
  • UniXとWindowsのプロセス間制御について

    今現在unixのC言語ベースで作成されたシステムを一部windowsのJava言語ベースに移行することを考えています。 概要は、 1.Unixで作られたGUIより、Windows側に処理の実行パラメータを送信。 2.Windows側でそのパラメータを受信し解析し適切な処理を行う。 3.処理結果を再度Unix側へ送信。 Unixからのパラメータ送信は、複数台ありWindows側は1台のマシンにて処理を行うことになります。 言語はすでに確定しており、unixとwindows間でのプロセス管理を行うための最良の方法の選択に困っています。 私が調べた中では、Winsock2もしくはJavaのSocketを使うなどのいくつか方法があるようなのですが。 どの方法を選択するのか最良なのか教えてください。 もし上記事例が載っているサイトなどがあればあわせて教えていただけると助かります。 よろしくお願いします。

  • タスクやプロセス管理について

    このカテゴリでよいか迷ったのですが質問させていただきます。 私は今までの仕事で、某セキュリティ会社の防犯監視システム開発、某携帯電話開発(UI)に携わってきました。 そこではリアルタイムOSマルチタスク環境でのプログラム開発だったのですが、マルチタスクといっても当然タスク毎に"実行可能状態"、"待ち状態"、"実行中状態"等(その他いろいろ)、各種状態を持ち、タスクプライオリティに従いOSがタスクのスケジューリングを行い順次タスクが切り替わって制御されているという感じだったのですが(何が言いたいかというと優先順位の違う複数のタスクが並列で動くことはないですよね?と言いたいのですが)、 今回LinuxOS(MontaVista)でのプログラム開発を行ってみて違いに戸惑いを感じました。(マルチ)プロセスとは何ぞや?から始まり、さらにそのプロセス内で作成されるスレッド、そのプロセス・スレッドは他のプロセス・スレッドと並列で動く等等。(正確にはあたかも同時に動作しているかのように見えるってことですよね?) 前半の"タスク"と後半の"プロセス"とはこのように別物なのですよね? 今までの経験では並列動作という概念が無かったもので、どうもしっくりこなく意見をあおぐ為投稿させていただきました。 かなり漠然としたことで恐縮なのですが、今まで述べたことでなにか勘違いしているんじゃないかとか間違えていることとかありますか? 長文となり申し訳ありません。

  • タスクマネージャーからプロセスを見てみると

    こんにちは。PC無知なのでよろしくお願いします。 よく処理が遅くなるのでCPUを見てみると、頻繁に100%に達していました。 プロセスを覗いてみると同じ名前のものが15個もあります。 これは何ですか? 検索して調べてみると、ウイルスチェックをした方がいいとあったのでしたのでチェックしましたが感染してないみたいです。 セキュリティはソースネクストのZEROです。 信用しても大丈夫でしょうか? ちなみにPCは丸5年使っていて複数の作業を同時にやることが多いです。 掃除とメンテナンスはちょくちょくやっているつもりですが処理が遅くなるということはもう寿命も近いのでしょうか? これだけの情報でいいのか分りませんが、 よろしくお願いいたします。

専門家に質問してみよう