Windowsでbatプロセスを停止する方法は?


11

WindowsでBATファイルをバックグラウンドで実行しています。これは約10分続きます。実行中に停止したいのですが、タスクマネージャのプロセスリストでその名前を見つけることができません。どうすればこれにアプローチできますか?ありがとう!

アップデート1

バックグラウンドで実行中のBATプロセスを停止するのは難しいようです。私は、BATファイルに関連するすべてのプロセスを名前で強制終了しようとします。 ping、tracert、netstatなど。より良い解決策がある場合は、お知らせください。ありがとうございます。

アップデート2

BATプロセスツリー

代替テキスト


1
どのようにしてバットファイルをバックグラウンドで実行させましたか?あなたはctrl-cを行うことができないと言います。それが機能しない場合は、break = onを試してみますが、ctrl-cは「バックグラウンドで」実行できないため、実行できません。多分それはすでに走り終わって、そしてあなたはそれが産んだものを殺さなければならないだけです。
barlop

2
@barlop、それはShellExecute(NULL,"open","some.bat",NULL,NULL,SW_HIDE);VC ++ でバックグラウンドで実行できます。
SpawnST 2010年

回答:


11

プロセスは通常、ツリー形式で起動されます。Microsoft/ Sysinternals Process Explorerを起動し、Show Process Tree(1)オプションをクリックして開始し、プロセスを右クリックしてKill Process Tree(2)を選択することをお勧めします。これにより、元のファイルとそれが立ち上げたすべてのもの。

代替テキスト


プロセスツリーを強制終了することは、少し重苦しい​​ようです。親プロセス(batコマンド)を強制終了するだけで十分な場合があります。
wag2639

1
@ wag2639、質問を読んだ後、私は彼がBATとスポーンされたプロセスを終了したいと思いましたか?処理に非常に時間がかかると言われているとき、プロセスが起動され、応答が書き込まれるまで何も起こらないことを理解しています...ツリーが終了しない場合、実行中のプロセスの束だけが存在します。何もしない。
ウィリアムヒルサム

私はこの方法を試し、写真を回答に追加しました。ありがとう。そして今、BATファイルとその子によって開始されたプロセスを強制終了できるコマンドを見つけましたtaskkill /F /T /IM cmd.exe。唯一の問題は、すべてのBATファイルがcmd.exe異なるPIDでプロセスを開始することです。 。私はどちらが私のターゲットであるかを理解する必要があります。
SpawnST 2010年

@SpawnST、どのファイルがBATファイルを起動していますか?複数のコピーがある場合は、それを起動しているアイテムを強制終了する必要があります。
ウィリアムヒルサム

@Wil、それはMFC / Dialogプロセスによって開始されます。ダイアログは、初期化されたときにウィンドウシェルでBATファイルを実行するだけです。今、ダイアログが終了したときにBATプロセスが完全に終了するようにしています。
SpawnST 2010年

5

コマンドの間にファイルの存在のチェックを挿入することにより、ロックファイルを使用して操作を続行するようにバッチファイルを変更できます。バッチファイルの実行を停止するには、ロックファイルを削除します。

ここにデモバッチファイルがあります:

echo xx > "c:\temp\lockfile"
pause
if not exist "c:\temp\lockfile" goto  exit
pause
del "c:\temp\lockfile"
:exit

現時点で実行されている可能性があるプロセスを激しく強制終了するには、バッチファイルから起動された可能性のあるすべてのタスクのtaskkillコマンドを含む「kill」バッチファイルを作成します。

del "c:\temp\lockfile"
taskkill /im mytask1.exe
taskkill /im mytask2.exe

それは良い考えですが、tracertたとえばコマンドが長時間実行されると、アプリに問題が発生する可能性があると思います。
SpawnST 2010年

ええ、それは私が今やっていることです、本当に暴力的なものです:-)そしておそらく、このソリューションではロックファイルは必要ありません。
SpawnST 2010年

現在のタスクが終了したときにバッチファイルが次のタスクを実行しないようにするために必要です。それ以外の場合は、taskkillがすでに実行された後にtask1が終了し、task2が開始される可能性があります。そのため、killバッチはtask2を単純に見逃してしまいます。
harrymc 2010年

1

通常、BATはCMD.exeのインスタンスを起動するだけです。スクリプトの動作に応じて、他のプロセスも開始されます。


それで、他のプロセスを開始し続けるのを止めることができる方法はありますか?
SpawnST 2010年

1
@SpawnST:CMDウィンドウが表示されている場合、CTRL + Cだけを入力できないのですか?
パラドロイド、2010年

@ jason404、私が質問で述べたように、それはバックグラウンドで実行されています。
SpawnST 2010年

1

私は、少なくともBATがCMDウィンドウで実行されている場合に役立つアプリを作成しました。実行中のアプリケーションウィンドウを表示して、アプリのPIDを取得できます。その後、アプリでアプリウィンドウを強制終了できます。また、生成されたすべてのプロセスを確認して強制終了することもできます。本当にシンプルなプログラムですが、この種のことには効果的です。また、BATファイルが実行されているHD上の場所を正確に追跡することもできます。


私はVC ++ / MFCでこの作業を行っており、それを実行するにはいくつかのWindowsコマンドが必要だと思います。応答をありがとう。
SpawnST 2010年

1

バッチファイルはどのように呼び出されますか?
タスクスケジューラからの場合は、そこから停止することもできます。サービスからの場合は、サービスを停止できます。



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.