У меня этот код в моей программе:
ProcessBuilder builder = new ProcessBuilder(command);
builder.directory(new File(Vars.pathToForFfmpegBinDir));
final Process process = builder.start();
InputStream is = process.getErrorStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println("!!! "+line);
}
Поскольку внешняя программа получить много информации на выходе, он загружается 100% одного ядра процессора в while
цикл.
Я попробовал другую версию этого кода:
ProcessBuilder builder = new ProcessBuilder(command);
builder.redirectError(new File(pathToForModerationDir+"/1err.log"));
builder.redirectOutput(new File(pathToForModerationDir+"/1inp.log"));
builder.directory(new File(Vars.pathToForFfmpegBinDir));
final Process process = builder.start();
process.waitFor();
Но он загружается на 100% одного ядра процессора на каждый процесс.
Как я могу уменьшить загрузку процессора в этом коде?
Когда я запускаю это, я попытался найти его top
но он использует менее 0,1% процессора и не появляется в моих топ-20 процессах для моего идентификатора пользователя.
ProcessBuilder builder = new ProcessBuilder("sh", "-c", "while true; do sleep 1; date; done");
builder.redirectErrorStream(true);
final Process process = builder.start();
try (BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
for (String line; (line = br.readLine()) != null; )
System.out.println("!!! " + line);
}