現在、あるVBプログラムを作成しています。
・Aプログラム(VBプログラム)
・Bプログラム(バッチプログラム)
・Cプログラム
ここで、AプログラムはShellでBプログラムを起動します。
Bプログラムは起動後、Cプログラムを起動します。
Aプログラムはある程度時間がたつと、BプログラムをTerminateProcessで
強制終了しますが、Bプログラムから起動したCプログラムを強制終了することができません。
このように、Bプログラム(親プロセス)-Cプログラム(子プロセス)を全てAプログラムから強制終了させるような良い方法はないでしょか?
ちなみに、開発はWindows2000Serverなので、taskkillコマンド(XP以降のコマンド)は使えません。
よろしくお願いします。
強制終了がデフォルトという仕様に問題があるような
気がしますが・・・。
BやCを作るときに、「ある条件を満たしたら終了する」ように
作っておき、Aからはその条件を満たしてやるだけ
という作りにはできないのでしょうか?
スピード的にはプロセス間通信で終了コマンドを与えるのが
いいでしょうが、それほどシビアでないなら、
「タイマ監視してC直下にKILL_C.DATファイルを発見したら
終了する」というようにCを作っておけば、
Aからは中身空っぽのKILL_C.DATを作成するだけで事足ります。
早速の対応、ありがとうございます。
上記ご指摘どおり、Cプログラムが外部ファイルから終了判定できるようにすれば簡単だったのですが、実はBプログラム、Cプログラムは完全にいじれない状態(他人の作成プログラム)です。
従って、Aプログラムからプロセス強制終了を実施したいと考えました。
TerminateProcess関数等を用いようと考えましたが、どうやら子プロセスまで終了できないようで、何かいい方法はないでしょうか?
ちなみに、Windows2000Serverでタスクマネージャを起動し、あるプロセスを
選択し、マウス右クリックすると「プロセスツリー終了」ができますが、これをAプログラムからBプログラムに対して実行させたい場合、コードはどのようになるかわかりますでしょうか?
以上
よろしくお願いします。
VBでなくて恐縮ですが、
Win32 でアプリケーションを列挙する方法
Microsoft 文書番号: JP175030
に、プロセスを列挙する方法が出ています。
殺したいプロセスのIDが取れれば、
あとはTerminateProcessできるでしょう。
ツイート | ![]() |