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

时间:2010-04-28 17:26:05

标签: java windows process asynchronous

在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

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

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

问题

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

1 个答案:

答案 0 :(得分:1)

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