
複数のマシン(Solaris8)からの情報を1台のマシン(Solaris8)で収集する
プログラムを作成したいのですが、rshではセキュリティの関係上使用出来ません。
そこでプロセス間通信を利用したいと考えております。
まず、複数のマシン上に情報収集用のプログラムを置いておき、1台のマシンから
パラレルにキックをかけて情報収集が出来ないものかお教え下さい。
名前は知っているのですが、方法がわかりません。
この様にすれば可能ですよとか、事例紹介ページ、規正の製品が有ればお教え下
さい。
よろしくお願い致します。
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() といったシステム
コールを使います。
> 基礎が全くわかっておりません。簡単な例で結構ですのでお教え下さい。
> 本来であれば、この程度の人間がご質問すること自体間違っていることは
> 承知しております。
ここは、分からない人が質問するサイトですから、質問すること自体は間違ってない
んですが、それなりに書くことがあるので、「簡単な例」といわれても書くのが
面倒なんです (^^;
No.2
- 回答日時:
client は WEB ブラウザなんですか?
> 応答性も考慮する必要があります。このプログラムを常駐させておくとした
> 場合、どのような方法があるのでしようか。
だから、質問に「プロセス間通信」と題をうったのですね。
ディスクからのロードが待てないくらい大きなプログラムなんですか?
ひとつの方法は、プログラムを /tmp や /var/tmp のようなメモリファイルシステム
に配置しておくことですね。
もうひとつは、CGI と daemon になって待ち構えている測定プログラムで
プロセス間通信をすることですね。
# これを聞きたかったのかな?
具体的に何が分からないんでしょう?
・デーモンの作り方が分からない
・プロセス間通信というものが分からない
・プロセス間通信の種類くらいは知っているが、実際にプログラムを組んだことがない
> このプログラムも複数の管理端末から同時にアクセスされる可能性もあり
アクセスが有るたびに、fork() で、測定プログラムの子プロセスを起こせば良い
だけの話だと思うんですが…
この回答への補足
お返事有難うございます。
>もうひとつは、CGI と daemon になって待ち構えている測定プログラムで
>プロセス間通信をすることですね。
その通りです。ご説明の仕方が悪く申し訳ありませんでした。
>・デーモンの作り方が分からない
>・プロセス間通信というものが分からない
>アクセスが有るたびに、fork() で、測定プログラムの子プロセスを起こせば良いだけの話だと思うんですが…
基礎が全くわかっておりません。簡単な例で結構ですのでお教え下さい。
本来であれば、この程度の人間がご質問すること自体間違っていることは
承知しております。
よろしくお願い致します。
No.1
- 回答日時:
> まず、複数のマシン上に情報収集用のプログラムを置いておき、1台のマシンから
> パラレルにキックをかけて情報収集が出来ないものかお教え下さい。
socket 通信のように、情報収集する側でプログラムを立ち上げておきたくない、と
いうことなのでしょうか?
情報を集める複数のマシンに何が入っているのか知りませんが、HTTP で CGI を
起動する、というのでは駄目ですか?
あと、
> rshではセキュリティの関係上使用出来ません。
が、どこまでを問題にしているか、によりますが ssh を使う、という手もありますね(→参考URL)。
参考URL:http://www-ccce.kek.jp/People/yashiro/Rep.euc/KE …
この回答への補足
早速のお返事有難うござます。
おっしゃる通りのことを実現したいのです。
Web画面(管理端末)から、対象となるホスト(複数の場合有り)を指定し
サブミットすることにより、対象となるホストに置いてあるプログラム
(情報収集用)を起動させ、結果を管理端末画面に表示するというものです。
このプログラムも複数の管理端末から同時にアクセスされる可能性もあり
応答性も考慮する必要があります。このプログラムを常駐させておくとした
場合、どのような方法があるのでしようか。
よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
OS入ってる機器のソフト・アプ...
-
あるプログラムのコマンドライ...
-
ファイルの開き方
-
読み込み中にアクセス違反が発...
-
未使用の変数を一括検索する方法
-
PICアセンブラを出来る方、教え...
-
Excelで4096点以上のFFTの方法
-
VBAにてメール作成した際、一部...
-
visual studio 2019を使ってい...
-
PICマイコンのコピー(クローン...
-
銃を発砲するならともかく、日...
-
COBOLでBLOCK CONTAINS句につい...
-
ドロップダウンリストの文字を...
-
VC++コンソールアプリでウイン...
-
main関数を先頭に置くデメリット
-
UWSCで指定のフォルダを開きたい。
-
表計算プログラムの作り方
-
binファイルってiphone専用です...
-
テキストボックスのエンターキ...
-
n88basicからwindows版Basicへ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
あるプログラムのコマンドライ...
-
ファイルの開き方
-
Excelで4096点以上のFFTの方法
-
VBAにてメール作成した際、一部...
-
読み込み中にアクセス違反が発...
-
ドロップダウンリストの文字を...
-
OS入ってる機器のソフト・アプ...
-
PICマイコンのコピー(クローン...
-
自動クエリとはどういうもので...
-
XnViewにwebpを「いつも開く」...
-
未使用の変数を一括検索する方法
-
VBAでユーザーフォームが自動的...
-
「Outlookが他のプログラムによ...
-
powered byの表記について
-
Excelに埋め込んだVBAのプログ...
-
excelのexe化について
-
銃を発砲するならともかく、日...
-
画像を読み込むのと取り込むの...
-
UWSCで指定のフォルダを開きたい。
-
visual studio 2019を使ってい...
おすすめ情報