
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番と同じようにハンドル
を取得します。
以上、参考になったでしょうか。
この回答へのお礼
お礼日時:2003/07/18 11:32
こんにちは。
回答ありがとうございました。
大変参考になりました。本当にありがとうございます。
また何かありましたら、宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プロセスIDの取得方法について
-
vb.netでEXCEL起動がうまくでき...
-
アプリケーションが終了するま...
-
C++のプログラムをバックグラウ...
-
タスクマネージャーのプロセス...
-
AppActivate関数について
-
他のEXEが起動しているかの確認
-
Process.Startの戻り値を後で取得
-
forkについて
-
他のアプリケーションの起動と...
-
C言語 特定のプロセスの終了を...
-
実行中のプログラムIDが取得...
-
Linuxのchdir(カレントディレク...
-
C#でのbatファイル実行結果取得
-
非表示になったエクセルは?
-
Linuxでのスレッド間メッセージ...
-
WMIでのプロセスの起動・終了監...
-
UNIX関数?(popen)...
-
windowsのプロセスIDやスレッド...
-
〔Windowsタスクマネージャ〕メ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
タスクマネージャーのプロセス...
-
バックグラウンドのプロセスの...
-
プロセスのアタッチ・デタッチ...
-
OSPFでプロセスを分ける意義に...
-
ADOでアクセスのレコードに...
-
非表示になったエクセルは?
-
Process.Startの戻り値を後で取得
-
vb.netでEXCEL起動がうまくでき...
-
C#でのbatファイル実行結果取得
-
プロセスIDの取得方法について
-
Linuxでのスレッド間メッセージ...
-
Visual C++からpingを実行して...
-
SendMessageが失敗するときがある
-
IISがフリーズ
-
スティーブ・ジョブズはプログ...
-
c言語でプロセスIDを調べたい
-
特定ユーザーのプロセス情報を...
-
怪しいプロセス教えてください。
-
セマフォとmutexの違いは?
-
Windowsでのfork方法
おすすめ情報