Java Зависает процесс

192
27 октября 2021, 01:10

Разбирался в Java.lang.Process и написал 2 программы:

эта

public static void main(String[] args) throws IOException {
    Writer writer = new FileWriter("C:\\Users\\User\\Desktop\\test\\output.txt", true);
    writer.write("Init message");
    for (int i = 0; i < 100000; i++) {
        System.out.println(i);
    }
    writer.close();
}

и запускашка

Process p1 = Runtime.getRuntime()
        .exec("java -classpath C:\\Users\\User\\Desktop\\test Main");
p1.waitFor();
System.out.println("finished");

Суть проблемы в том, что если я запускаю программу напрямую, тогда она завершает роботу нормально и выводит в файл все. Если запускаю через вторую программу, то она доходит до 99990 прохода(смотрю по выводу в файл) и зависает, ибо, там есть waitFor(). Почему так и можно ли это исправить?

Заранее спасибо за ответы.

Answer 1

Из JavaDoc для класса Process

By default, the created subprocess does not have its own terminal or console. All its standard I/O (i.e. stdin, stdout, stderr) operations will be redirected to the parent process, where they can be accessed via the streams obtained using the methods getOutputStream(), getInputStream(), and getErrorStream(). The parent process uses these streams to feed input to and get output from the subprocess. Because some native platforms only provide limited buffer size for standard input and output streams, failure to promptly write the input stream or read the output stream of the subprocess may cause the subprocess to block, or even deadlock.

Иными словами, когда создаёшь подпроцесс, ты отвечаешь за вычитывание его output'а или он может повиснуть.

В Яве можно настроить автоматическое вычитывание (через редирект в родительскую консоль) https://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.html#redirect-input

READ ALSO
Уровень изоляции транзакций и Hibernate

Уровень изоляции транзакций и Hibernate

Первый вопросКакая связь существует между уровнем изоляции транзакций, параметрами JPA Lock

116
Переписать SQL запрос в HQL

Переписать SQL запрос в HQL

Необходимо переписать запрос

81
bootstrap выравнивание нескольких таблиц

bootstrap выравнивание нескольких таблиц

ищу помощи по правильному формированию списков характеристик товара, остановился на отображении в виде таблицы, однако имею неприятность...

116
Съезжает элемент в CSS

Съезжает элемент в CSS

при выборе вариативного товара в woocommerce, надпись очистить неправильно отображается, плывет https://apphoneru/product/iphone-xs-max-512gb-zolotoj/ хотя вот на этом...

99