重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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

よろしくお願い致します。

A 回答 (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() といったシステム
コールを使います。


> 基礎が全くわかっておりません。簡単な例で結構ですのでお教え下さい。
> 本来であれば、この程度の人間がご質問すること自体間違っていることは
> 承知しております。

ここは、分からない人が質問するサイトですから、質問すること自体は間違ってない
んですが、それなりに書くことがあるので、「簡単な例」といわれても書くのが
面倒なんです (^^;
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/12/13 18:12

client は WEB ブラウザなんですか?



> 応答性も考慮する必要があります。このプログラムを常駐させておくとした
> 場合、どのような方法があるのでしようか。

だから、質問に「プロセス間通信」と題をうったのですね。
ディスクからのロードが待てないくらい大きなプログラムなんですか?

ひとつの方法は、プログラムを /tmp や /var/tmp のようなメモリファイルシステム
に配置しておくことですね。

もうひとつは、CGI と daemon になって待ち構えている測定プログラムで
プロセス間通信をすることですね。

# これを聞きたかったのかな?

具体的に何が分からないんでしょう?

・デーモンの作り方が分からない
・プロセス間通信というものが分からない
・プロセス間通信の種類くらいは知っているが、実際にプログラムを組んだことがない


> このプログラムも複数の管理端末から同時にアクセスされる可能性もあり

アクセスが有るたびに、fork() で、測定プログラムの子プロセスを起こせば良い
だけの話だと思うんですが…

この回答への補足

お返事有難うございます。

>もうひとつは、CGI と daemon になって待ち構えている測定プログラムで
>プロセス間通信をすることですね。
その通りです。ご説明の仕方が悪く申し訳ありませんでした。

>・デーモンの作り方が分からない
>・プロセス間通信というものが分からない
>アクセスが有るたびに、fork() で、測定プログラムの子プロセスを起こせば良いだけの話だと思うんですが…

基礎が全くわかっておりません。簡単な例で結構ですのでお教え下さい。
本来であれば、この程度の人間がご質問すること自体間違っていることは
承知しております。

よろしくお願い致します。

補足日時:2001/12/13 14:41
    • good
    • 0

> まず、複数のマシン上に情報収集用のプログラムを置いておき、1台のマシンから


> パラレルにキックをかけて情報収集が出来ないものかお教え下さい。

socket 通信のように、情報収集する側でプログラムを立ち上げておきたくない、と
いうことなのでしょうか?

情報を集める複数のマシンに何が入っているのか知りませんが、HTTP で CGI を
起動する、というのでは駄目ですか?

あと、

> rshではセキュリティの関係上使用出来ません。

が、どこまでを問題にしているか、によりますが ssh を使う、という手もありますね(→参考URL)。

参考URL:http://www-ccce.kek.jp/People/yashiro/Rep.euc/KE …

この回答への補足

早速のお返事有難うござます。

おっしゃる通りのことを実現したいのです。

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

よろしくお願い致します。

補足日時:2001/12/13 12:46
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!