1

VB6 アプリケーションをコンパイルする Ant タスクを作成しました。

ソース ファイルの前処理を行った後VB6.exe、適切なパラメーターを使用して開始します。

Process p = Runtime.getRuntime().exec(...);
p.waitFor();

しかし、Ant の実行中に Ctrl+C を押すと、スクリプトとタスクは終了しますが、生成されたプロセスはまだ実行されています。

Ant スクリプトが終了したときに、開始したプロセスを自動的に終了するにはどうすればよいですか? Ctrl+C を押すとどうなりますか? 私のタスクはすぐに殺されますか、それとも反応する方法はありますか?

4

2 に答える 2

1

Runtime.exec()別のOSプロセスでコマンドを実行します。Ctrl + Cを押すと、Javaプロセスが強制終了されます。

あなたは試すことができRuntime.addShutdownHook(Thread hook)ます。このフックスレッドは、Ctrl+Cを押したときにJVMがシャットダウンしているときに呼び出されます。開始したプロセスを強制終了しようとするフックスレッドを実装します。プロセスを強制終了するには、そのOSでコマンドを見つけて、で使用する必要がありますRuntime.exec()

于 2009-04-17T08:12:20.217 に答える
1

このコードに興味があるかもしれません:

    final Process process = new ProcessBuilder("blah blah").start();
    Runtime.getRuntime().addShutdownHook(new Thread() {

        @Override
        public void run() {
            process.destroy();
        }

    });
    process.waitFor();

addShutdownHookの javadoc :

Java 仮想マシンは、次の 2 種類のイベントに応答してシャットダウンします。

  • 最後の非デーモン スレッドが終了するか、exit (同等の System.exit) メソッドが呼び出されると、プログラムは正常に終了します。
  • 仮想マシンは、^C の入力などのユーザー割り込み、
    またはユーザー ログオフやシステム シャットダウンなどのシステム全体のイベントに応答して終了します。
于 2009-04-17T09:07:05.467 に答える