У меня есть код, который запускает процесс cmd.exe с помощью ProcessBuilder , и когда я уничтожаю этот процесс с помощью process.destroy();
, загрузка ЦП увеличивается (0%> 30%). Каждый раз, когда я запускаю и уничтожаю cmd.exe, появляются новые потоки, которые приводят к загрузке процессора до 100%. Могу я как-то остановить этот l oop, когда InputStream закончится? То же самое и в другом моем приложении, когда сервер останавливается, например, с помощью Ctrl- C, а клиент имеет высокое использование процессора.
input.readLine();
хочет читать из несуществующего InputStream и вызывает высокое использование процессора. Он застрял в этой строке.
Я использую Java 8
Код:
InputStream inputraw = process.getInputStream();
BufferedReader input = new BufferedReader(new InputStreamReader(inputraw));
while(true)
{
String cmd = input.readLine(); //HERE!
//write cmd to console functions.....
}
if (isWindows) {
command = (String.format("cmd.exe"));
} else {
command = (String.format("sh"));
}
ProcessBuilder pb = new ProcessBuilder()
.command(command)
.redirectErrorStream(true);
process = pb.start();