Получение терминального содержания от псевдотерминала (pts)?

На Ubuntu, там способ получить содержание псевдотерминала (pts - например,/dev/pts/4) - т.е. вывести строки текста в терминале в файл - программы, которую это уже запускает в том терминале? Я не говорю о делании снимка экрана, но хранении, что программа пишет в терминал в файл. Это - основанная на проклятиях программа, которая регулярно переписывает экран.

Моя основная проблема, то, что моя программа уже работает - и я хотел бы сохранить это прежде, чем остановиться (и возможно перезапустить) программа.

Я знаю, что существует несколько способов выполнить, это, я думал об этой возможности, прежде чем я запустил программу: Просто перенаправляя вывод в файл; использование screen, и взятие бумажной копии или вход сессии; использование виртуального терминала вместо этого (/dev/tty..) и использование видео консольного запоминающего устройства (/dev/vcs..); использование команды script... (и вероятно многие другие...)

Но все это, только работал бы, если я сделал это, прежде чем я запустил программу!

Так, есть ли все еще способ, которым я мог "шпионить" на псевдотерминале и записать, это довольно? Я могу стать корнем, если я имею к...

1
задан 21 December 2016 в 06:17

1 ответ

Возможно, не непосредственно от tty, но этого processus должен использовать write syscall. Можно использовать strace для ловли всех вызовов записи.

sudo strace -e t=write -s 6000 -p your-process-id 2>logfile

Вы получите вещи как это, которому, возможно, понадобился бы еще некоторый парсинг:

write(1, "191\n", 4)                    = 4
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=9916, si_uid=1001, si_status=0, si_utime=0, si_stime=0} ---
write(1, "21021\n", 6)                  = 6
write(1, "14728\n", 6)                  = 6
write(1, "13291\n", 6)                  = 6
write(1, "20372\n", 6)                  = 6

, Если Ваша программа пишет в некоторые другие файлы, Вы получите это также в выводе. Это может быть раздражающим. Или это в конечном счете могло быть огромным объемом данных. Используемый дескриптор файла равняется, вероятно, 1. Вы можете <час> grep "^write.1"

sudo strace -e t=write -s 6000 -p your-process-id 2>&1 | grep ^write.1 >logfile

В следующий раз, попытаться выполнить Вас команда с script. Это ловит все данные, записанные в tty.

script -c "program and args" logfile
1
ответ дан 7 December 2019 в 15:43

Другие вопросы по тегам:

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