質問: .bat ファイルを書いていてふと気になったこと。 ``` taskkill /pid 2268 /t /f ``` と書くことで、指定したプロセスIDを親とするすべてのプロセスを強制終了することが出来ますよね。 > > 成功: PID 2268 のプロセス (PID 2532 の子プロセス) を終了しました。 > > > 逆に、`PID 2268`を子として持つプロセス`PID 2532`を .bat ファイルから終了させたい場合、どうすればよいのでしょうか? 実際に終了させたいのはコマンド プロンプト画面です。 ちなみにこの`PID 2268`は、`jps -l`で取得した一覧から、指定した .jar ファイルを実行しているプロセスのIDを使用しています。
回答: 子プロセスを`taskkill`した時に表示されるメッセージから親のプロセスIDを抜き出して`taskkill`することにしました。 ``` set childPID=子プロセスのID set res=taskkill /pid !childPID! /t /f for /f "delims=" %%a in ('!res!') do ( set pid=%%a ) set pid2=!pid:~0,-17! set pid3=!pid2:~-4! call :TRIM !pid3! taskkill /pid !pid4! /t /f timeout -t 5 goto ACTIVATE :TRIM set pid4=%* exit /b 0 :ACTIVATE その後の処理 ``` かなり強引な方法なので、別の方法が見つかり次第改良したほうが良さそうです。