Я не уверен, где находится цикл, но вам нужно будет создавать новый объект Proc
(и, следовательно, новый InputStream
) каждый раз в цикле. В противном случае вы всегда будете смотреть на результат до первого звонка. Javadocs для ProcessBuilder
указывают, что вам не нужно каждый раз создавать один из них.
Может также возникнуть состояние состязания, когда поток ввода еще не готов, когда вы вызываете available()
. Вы должны убедиться, что входной поток достиг EOF (что произойдет с ps, но не с, скажем, top) перед печатью результатов.
Вы также не обрабатываете кодирование должным образом, хотя я не знаю, что за кодировка выводит "ps" (за пределами ASCII). Поскольку "ps", вероятно, является ASCII, это достаточно безопасно, но может не подходить для других команд (и для других входных потоков).