首页 文章

启动外部进程后,Java进程不会终止

提问于
浏览
0

在Windows上,我已经启动了一个程序"async.cmd",其中包含 ProcessBuilder

ProcessBuilder processBuilder = new ProcessBuilder( "async.cmd" );
processBuilder.redirectErrorStream( true );
processBuilder.start();

然后我在一个单独的线程中读取进程的输出,如下所示:

byte[] buffer = new byte[ 8192 ];
while( !interrupted() ) {
    int available = m_inputStream.available();
    if( available == 0 ) {
        Thread.sleep( 100 );
        continue;
    }

    int len = Math.min( buffer.length, available );
    len = m_inputStream.read( buffer, 0, len );
    if( len == -1 ) {
        throw new CX_InternalError();
    }
    String outString = new String( buffer, 0, len );
    m_output.append( outString );
}

现在它发生了“async.cmd”文件的内容是这样的:

REM start a command window 
start cmd /k

启动此extenal程序的进程终止( process.waitFor() 返回退出值) . 然后我发送了一个 readerThread.interrupt() 给读者线程,线程终止了 .

但是仍有一个线程正在运行并没有终止 . 这个线程使我的java应用程序保持运行,即使它退出了它的 main 方法 . 使用调试器(eclipse)我无法暂停此线程 . 退出打开的命令窗口后,我的java程序也退出了 .

问题

如何在命令窗口打开时退出我的java程序?

1 回答

  • 1

    在知道子进程完成后(例如,在process.waitFor()返回退出值之后),可以使用System.exit(0)方法 . 无论如何,此方法将退出应用程序而不考虑后台线程 .

相关问题