OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • 困ってます
  • 質問No.184328
  • 閲覧数518
  • ありがとう数1
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 38% (23/59)

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

よろしくお願い致します。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル14

ベストアンサー率 50% (1122/2211)

あなたが知りたい内容はだいたい分かった気がします。

悪いことは言いませんから、まずは、測定プログラムを 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

お礼率 38% (23/59)

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

その他の回答 (全2件)

  • 回答No.1
レベル14

ベストアンサー率 50% (1122/2211)

> まず、複数のマシン上に情報収集用のプログラムを置いておき、1台のマシンから > パラレルにキックをかけて情報収集が出来ないものかお教え下さい。 socket 通信のように、情報収集する側でプログラムを立ち上げておきたくない、と いうことなのでしょうか? 情報を集める複数のマシンに何が入っているのか知りませんが、HTTP で CGI を 起動する、というのでは駄目ですか? ...続きを読む
> まず、複数のマシン上に情報収集用のプログラムを置いておき、1台のマシンから
> パラレルにキックをかけて情報収集が出来ないものかお教え下さい。

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

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

あと、

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

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

お礼率 38% (23/59)

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

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

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

よろしくお願い致します。
投稿日時 - 2001-12-13 12:46:17
  • 回答No.2
レベル14

ベストアンサー率 50% (1122/2211)

client は WEB ブラウザなんですか? > 応答性も考慮する必要があります。このプログラムを常駐させておくとした > 場合、どのような方法があるのでしようか。 だから、質問に「プロセス間通信」と題をうったのですね。 ディスクからのロードが待てないくらい大きなプログラムなんですか? ひとつの方法は、プログラムを /tmp や /var/tmp のようなメモリファイ ...続きを読む
client は WEB ブラウザなんですか?

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

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

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

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

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

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

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


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

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

お礼率 38% (23/59)

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

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

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

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

よろしくお願い致します。
投稿日時 - 2001-12-13 14:41:29
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ