@Decker

Как получить stdout уже запущенного процесса?

Возникла простая задача и, к сожалению, не могу найти решения. Есть некий процесс process выводящий информацию в stdout. Предположим что мы подключились к серверу через ssh и запустили этот процесс как process & . В результате пока мы находимся в данном сеансе SSH мы видим все что этот процесс пишет в stdout на экране, но при релогине на сервер, естественно, не видим уже ничего, хотя этот процесс работает в фоне. Про перенаправление ввода / вывода в файл, screen и т.п. - знаю.

Интересует способ как прочитать stdout уже выполняющегося процесса. Из /proc/$(pid)/fd/1, как советуют в интернете, считать почему-то ничего не получается. Т.е. tail -f /proc/$(pidof process)/fd/1 ничего не выводит. readlink -f /proc/$(pidof process)/fd/1 показывает /dev/pts/19, но варианты вроде tail -f /dev/pts/19 или cat /dev/pts/19 также не работают.

В итоге вопрос остается открытым - как увидеть stdout уже запущенного процесса, если он отсоединен от консоли? Или может быть есть возможность "приаттачить" его к консоли обратно? Заранее спасибо.

p.s. Хочется реализовать задачу без перенаправления вывода процесса в файл и без запуска его в screen'е.
  • Вопрос задан
  • 2465 просмотров
Пригласить эксперта
Ответы на вопрос 3
chupasaurus
@chupasaurus
Сею рефлекторное, злое, временное
reptyr для этого придумали.
Ответ написан
Комментировать
@synapse_people
а почему через fd/1 не работает? Должно работать
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
при релогине на сервер,при релогине на сервер, естественно, не видим уже ничего, хотя этот процесс работает в фоне естественно, не видим уже ничего, хотя этот процесс работает в фоне

Что-то я не уверен, что процесс "работает в фоне". Потому что если запустить процесс как фоновый, а потом закрыть терминал, очередной вывод в stdout у процесса заканчивается ошибкой (что можно посмотреть через strace):
write(1, "y\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\n"..., 8192) = -1 EIO (Input/output error)

После чего нормальный процесс завершается. Ненормальный процесс, конечно, может продолжать писать в файл после ошибки, но что при этом происходит сказать сложно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы