• ベストアンサー

ストール監視の監視方法

今回はじめて参加させて頂きます。 宜しくお願い致します。 質問なのですが、 今回、Cプログラムでストール監視プロセスを作成し、 別のプロセスを監視したいと思っています。 そこで、ストール監視の方法として一般的なやり方及び何かいい方法がありましたら ご教授の程、宜しくお願い致します。

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

  • ベストアンサー
  • BILLY-J
  • ベストアンサー率57% (60/105)
回答No.1

こんばんは。 開発環境やターゲットが判らないのでWIN系と仮定して書きますね。 一般的な方法かどうかは不明ですが、私なら… 何らかの方法で監視対象となるプロセスのプロセスハンドルを取得し、 WaitForSingleObject で待つ手法を選択します。 WaitForSingleObject または WaitForMultipleObjects でプロセスの ハンドルを待機した場合は、そのプロセスが終了(自発的に終了含む) した場合にシグナルとなり制御を戻します。 その後は GetExitCodeProcess 等で終了理由を伝搬し、再開動可能な 状況なら対象プロセスを再起動、何度やっても同じ状況になることが 推測できる場合(動作環境不備とか)は警告メッセージ、等々。 この場合、監視する側がどうやって監視される側を認識するかが1つの ポイントになります。 監視する側:A、監視される側:B、とします。 1.AがBを起動する場合 対象プロセスBを CreateProcess した時に取得する PROCESS_INFORMATION 構造体が持つ hProcess でOKです。 2.BがAを起動する場合 B自身のプロセスIDを、A起動時の引数等に指定して引き渡し、A内部で OpenProcess を使ってハンドルを取得します。 3.第3者CがAもBも起動する場合 Bを先に起動し、PROCESS_INFORMATION に設定されたプロセスIDをAの 起動引数に。後は2番の手法と同じ。 4.起動時の制御が困難、または両者の起動が全く無関係な経路の場合 B→Aに何とかしてB自身のプロセスIDを伝える。所謂プロセス間通信 の考えが必要になると思います。 ・共有メモリ(またはファイル)と同期オブジェクトを使って情報伝搬 ・パイプやソケット等を使って文字通り通信する 等が挙げられますが、この辺りについては「プロセス間通信」で検索を 掛ければ多数ヒットするようですので御参考にどうぞ。 5.4番の手法も不可能な場合 監視対象Bのプログラムに対しては手を加えられない場合等が該当。 これは力業になってしまいますが… 現在起動中の全プロセスを列挙(一覧を取得)し、その中からプロセス名 等を元に監視対象プロセスを探し出す。そこまでやればプロセスと対に なるプロセスIDも取得できている筈なので、2番と同じようにハンドル を取得します。 以上、参考になったでしょうか。

mr_bonta
質問者

お礼

こんにちは。 回答ありがとうございました。 大変参考になりました。本当にありがとうございます。 また何かありましたら、宜しくお願い致します。

関連するQ&A

  • サーバーログの監視について

    Redhat Linuxで構築されたサーバーの監視についての質問です。 データセンター側で3プロセスまでなら基本料金内で24時間監視して くれるとのことですが、一体どれを任せたら最良かを決めあぐねています。 以下に監視すべきプロセス名を書きますので、プライオリティが高い プロセスをご教授願えますでしょうか?よろしくお願い致します。 1:syslogd 2:crond 3:ntpd 4:sshd 5:nvpmgr(NetVault) 6:rhnsd 7:master(Postfix) 8:named 9:httpd 10:java(Tomcat)

  • C言語 特定のプロセスの終了を監視

    I フィルター(有害サイトブロックソフト)って知っていますか?あのソフトは、2つのプログラムから成っていて、片方のプロセスを終了させるともう片方のプロセスが起動し、互いに監視しあっているので簡単には終了できません。 そのようなこと(つまり、簡単に終了させることができないようにプロセス2つで監視し合っている)をC言語で行いたいのですが、プロセスを監視するとか全然わかりません。 とっても初心者なので、できる限り詳しく、ソースコードなどもあればとてもうれしいのですが・・・ 手間のかかる質問ですが、どうぞ回答してくださるかたよろしくお願いします。

  • 実行中のプロセス監視して任意のプログラムを実行したい

    常時プロセスを監視し、特定のプログラムが実行されたら別の任意のプログラム(またはコマンド)を自動的に実行するという方法はありますでしょうか? こういった事がフリーウェアであったら嬉しいのですが…

  • アプリケーションのプロセス監視について

    VisualBasic.netでフォーム(Form1)を作成、Visible=Falseで隠した後、タスクトレイにアイコンを表示させるプログラムを作っています。以前の質問に、プロセス監視をするとexeが軽くなるとあるんですが、理屈がわかりません。どうしてexeが軽くなるんでしょうか? よろしくお願いします。

  • printfでの出力を監視

    Linuxでのプログラムについて質問です。 言語はCを使っています。 あるランダムでprintfにて文字列が出力されるというプログラムがあり、このプログラムに対してバックグラウンドにて監視し、特定の文字列が出力された場合それに対する動作を行うとういことはできるのでしょうか? 動作としては、 バックグラウンドにて監視プログラム起動 ↓ 文字列出力プログラム起動 ↓ 監視プログラムが特定の文字列を検出 ↓ それに対応する動作(別のプログラム起動等)を行う ということをさせたいと考えています。 よろしくお願いします。

  • スレッドの監視方法について

    現在、pthread_createにてスレッドを生成するプログラムを作成しております。phread_createにてスレッド生成後、生成したスレッドが実行中か判断する方法はないのでしょうか? 大変申し訳ございませんが、ご教授宜しくお願い致します。

  • 起動しているmdbよりバッチでレポート印刷

    お世話になります。 現在起動中のmdbにあるレポートを、バッチを実行して印刷したいと考えておりますが、レポートを印刷する為のマクロ(レポート起動)を作成し、バッチで下記を実行すると、別プロセスでtest.mdbが開いてしまいます。。 C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE" "C:\test.mdb" /x "レポート起動" この書き方だから別プロセスで開いてしまうのかと思いますが、起動中のmdbの場合、どのように記載すればよいのか、ご教授の程、宜しくお願い致します。

  • ファイル更新監視について

    お世話様になっております。 Linuxである特定のファイル(aaa.txt)を監視して、そのファイルが更新または新規に作成されたら特定のスクリプト(bbb.sh)を実行したいと思いますが、どのように監視スクリプトを組んだら良いのでしょうか? ご教示の程宜しくお願い致します。

  • コンソールを監視したい

    miracle linux を使用しています。 C言語system関数でrxvtを立ち上げて、コンソール画面に数分間なんの入出力がなければ、終了させる。という事をさせたいのですが、なにか方法はないでしょうか? そもそもsystem関数で立ち上げたrxvtのstdin,stdoutを監視する事が可能なのでしょうか? もし可能でなければ、他の方法でコンソールを立ち上げ、監視する方法があるのでしょうか? どなたか、知っていらしたらご教授していただけたら幸いです。 宜しくお願い致します。

  • Oracleの監視。

    はじめまして。 Windows2000 SP2 で、Oracle8.1.7を使用しています。 で、質問なのです。 みなさんは、Oracleの監視って、どのようにされていますか。 例えば、プロセス、リスナー、カーソルの状態など、 現在、Oracleがどのような状態なのか、知りたいのです。 さらさらっと、検索してみると、高価なツールはたくさんありますね。 できれば、わざわざ、そういうものを購入しないで、出来たらいいな、と。 フリーなソフト、または、こういう監視ができるコマンドでも結構です。 あまり、お金をかけずに、監視が出来る方法を教えてください。 よろしくお願いします。

専門家に質問してみよう