Если программа уже запущена, это вопрос взлома (см. Ниже), чтобы перенаправить его вывод. Вместо этого вы можете/должны принять меры предосторожности заранее.
Мне было очень полезно всегда запускать удаленные команды в сеансе screen. Это позволяет:
- Прилагается и отсоединяется к сеансу по желанию и не нарушает работу программ. Это означает, что вы можете отсоединить сеанс, выйти из системы, затем войти в систему позже и найти все свои «окна» и запущенные программы по мере их выхода (или, надеюсь, готовые вычисления). Это также работает, когда ваше ssh-соединение неожиданно отбрасывается, или если вам нужно подключаться из нескольких мест одновременно (например, с вашего собственного ноутбука/машины через ssh и непосредственно из терминала университетской машины);
- имеют несколько (текстовый режим) «окна», работающие на одном и том же ssh-соединении, и переключаются между ними (и их выходом) с помощью сочетаний клавиш;
- имеют буфер прокрутки для каждого «окна», так что, даже если вы забыли использовать
tee
, вы можете прокрутить вверх и посмотреть, что напечатала программа;
- установить пароль сеанса, чтобы только вы могли подключиться к нему.
О хакерской части:
Если вы застряли работает очень долго и важной программы, и не может перезапустить его, чтобы использовать метод, описанный выше, есть еще надежда.
Дескрипторы открытых файлов для каждого процесса (включая его текущий stdout) можно найти через файловую систему /proc
. Используя это, вы можете поменять файловый дескриптор и переключить командный переключатель на выход в другое место на лету. This script (fdswap.sh) использует gdb для замены файлового дескриптора из работающего процесса и there's an article, объясняя, как его использовать.
Вкратце: найдите pid выполняющегося процесса, затем запустите ls -l /proc/$pid/fd/0
, чтобы найти, где находится его текущий выход, затем используйте приведенный выше сценарий для его замены: fdswap.sh /dev/pts/$vty /path/to/new/output $pid
.
Историческая справка: http://www.phrack.org/issues.html?issue=51&id=5
Перенаправить вывод в файл и использовать 'tail -f' для чтения файла? Я не знаю, можно ли перенаправить вывод после запуска программы. – rm5248
Я думаю, что это технически возможно, но вовлекает в себя отладчик, чтобы изменить открытые дескрипторы файла текущего процесса. Не для слабонервных и, вероятно, больше проблем, чем того стоит. – chepner