2012-01-07 4 views
2

Можно ли захватить/перехватить вывод из уже запущенной программы Java?Вывести вывод из запущенной Java-программы

Это моя ситуация: у меня есть программа, которая занимает несколько часов, чтобы закончить. Поэтому я запускаю его и позволяю компьютеру выполнять эту работу. Я могу войти на компьютер, на котором запущена программа с SSH, и посмотреть, как она работает с ps, но я хотел бы перехватить вывод, который записывается на консоль.

Есть ли способ сделать это?

Нужно ли предоставлять дополнительную информацию?

ответ

6

Запустите приложение в сеансе screen, отсоедините его от сеанса, а затем вы можете подключить его и снова подключить, чтобы увидеть прогресс. Вот некоторая информация о using screen.

Другой вариант - перенаправить стандартный вывод и стандартную ошибку в файл и использовать что-то вроде tail для просмотра его содержимого. Пример: my_program &> /tmp/output

Хорошо, я просто понял, что был немного оффтопик, потому что я занимался случаями, когда вам приходилось думать вперед. Теперь, если tou хочет получить его из работающего процесса, вы можете использовать gdb.

gdb -p process_id 
(gdb) p close(1) 
$1 = 0 
(gdb) p creat(“/tmp/output″, 0600) 
$2 = 1 
(gdb) q 

Это поместит вывод в /tmp/output и снова, вы можете использовать tail, чтобы увидеть его в интерактивном режиме.

+1

+1 для упоминания о перенаправлении в файл и использовании 'tail' для просмотра. – Perception

+0

Спасибо, это работает! Можно ли «отсоединить» нового слушателя? Я также хочу отметить, что вы должны сделать это как пользователь ** root **. – Henridv

+0

Можно ли немного объяснить, что делают эти команды gdb? Я уже нашел эту статью, но она не объясняет каждую команду: [link] (http://blog.tridgell.net/?p=4) – Henridv

0

Да, вы должны захватить стандартные потоки ввода, вывода и ошибок. Выезд $ man popen или this SO question.

EDIT: для уже запущенного процесса см., Можно ли подключить базовый отладчик к процессу и дублировать входные и выходные потоки в соответствии с приведенным выше.

Смежные вопросы