gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:05:25 25 4
gpt4 key购买 nike

在 Windows 上,我使用 ProcessBuilder 启动了一个程序“async.cmd”,如下所示:

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 方法,该线程仍使我的 java 应用程序保持运行。使用调试器(eclipse)我无法暂停这个线程。当我退出打开的命令窗口后,我的java程序也退出了。

问题

如何在命令窗口保持打开状态时退出 java 程序?

最佳答案

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

关于Java 进程在启动外部进程后不会终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2731749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com