親プロセスと子プロセスの強制終了


ゲストユーザ  2002-07-12 05:37:46  No: 75819

現在、あるVBプログラムを作成しています。
・Aプログラム(VBプログラム)
・Bプログラム(バッチプログラム)
・Cプログラム
ここで、AプログラムはShellでBプログラムを起動します。
Bプログラムは起動後、Cプログラムを起動します。
Aプログラムはある程度時間がたつと、BプログラムをTerminateProcessで
強制終了しますが、Bプログラムから起動したCプログラムを強制終了することができません。
このように、Bプログラム(親プロセス)-Cプログラム(子プロセス)を全てAプログラムから強制終了させるような良い方法はないでしょか?
ちなみに、開発はWindows2000Serverなので、taskkillコマンド(XP以降のコマンド)は使えません。
よろしくお願いします。


Say  2002-07-12 20:11:50  No: 75820

強制終了がデフォルトという仕様に問題があるような
気がしますが・・・。

BやCを作るときに、「ある条件を満たしたら終了する」ように
作っておき、Aからはその条件を満たしてやるだけ
という作りにはできないのでしょうか?

スピード的にはプロセス間通信で終了コマンドを与えるのが
いいでしょうが、それほどシビアでないなら、
「タイマ監視してC直下にKILL_C.DATファイルを発見したら
終了する」というようにCを作っておけば、
Aからは中身空っぽのKILL_C.DATを作成するだけで事足ります。


ゲストユーザ  2002-07-16 00:38:50  No: 75821

早速の対応、ありがとうございます。
上記ご指摘どおり、Cプログラムが外部ファイルから終了判定できるようにすれば簡単だったのですが、実はBプログラム、Cプログラムは完全にいじれない状態(他人の作成プログラム)です。
従って、Aプログラムからプロセス強制終了を実施したいと考えました。
TerminateProcess関数等を用いようと考えましたが、どうやら子プロセスまで終了できないようで、何かいい方法はないでしょうか?
ちなみに、Windows2000Serverでタスクマネージャを起動し、あるプロセスを
選択し、マウス右クリックすると「プロセスツリー終了」ができますが、これをAプログラムからBプログラムに対して実行させたい場合、コードはどのようになるかわかりますでしょうか?

以上
よろしくお願いします。


Say  2002-07-17 22:59:39  No: 75822

VBでなくて恐縮ですが、

Win32 でアプリケーションを列挙する方法
Microsoft 文書番号: JP175030 

に、プロセスを列挙する方法が出ています。
殺したいプロセスのIDが取れれば、
あとはTerminateProcessできるでしょう。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加