У меня есть процесс, выполняющийся на Slackware 13.37, который выводит данные в окно терминала. Можно ли читать/перенаправить этот вывод в окно ssh/PuTTY без завершения/перезапуска процесса?Чтение консольного вывода процесса через SSH, linux
ответ
Вы можете сделать вывод с использованием перенаправления оболочки или с помощью программы, такой как script
- при условии, что ваша программа была запущена «обычным способом». (Можно писать через специальные устройства на другие терминалы, учитывая соответствующие разрешения).
Один предполагает, что вы уже знаете о перенаправлении вывода, например,
foo >bar
но есть случай, например, графического интерфейса пользователя программы, которая продолжает писать на терминал.
Не беспокоясь о вмешательстве в программу, перенаправляя ее вывод, я бы запустил script
и запустил программу в оболочке, которая начинается script
. Тогда все, что написано в этой оболочке, будет отправлено в файл typescript
(по умолчанию).
С другой стороны, программы GUI, которые начинают, могут быть конфигурируемыми терминальными окнами, позволяющими настраивать их с помощью сценария запуска, который может захватывать выходные данные.
Как указано в How to open process again in linux terminal?, можно подключить к работающему процессу с помощью strace, учитывая его идентификатор процесса. Используя опцию -e
, как описано в 7 Strace Examples to Debug the Execution of a Program in Linux, вы можете просто извлечь write
звонки.
Имейте в виду, с strace
что непечатаемые символы из записи преобразуются в печати текста, и что strace
отображает аргументы функции до определенного лимита (который можно настроить с помощью опции -s
). Выходной сигнал strace
может быть перенаправлен (и его не нужно запускать на том же терминале, что и исходный процесс).
спасибо. Я забыл упомянуть, что я не могу завершить/перезапустить процесс, так как это нарушит много запущенных сервисов. – astralmaster
Я больше думал о фильтрации журнала strace для написания системных вызовов. – astralmaster