Прикрепление к выходу процессов для просмотра


Как бы я "прикрепил" консоль / терминал-представление к выходу приложений, чтобы я мог видеть, что он может говорить?

Как я могу отсоединиться от вывода приложений, не убивая приложение?

обычно, если вы запускаете разговорчивое приложение с помощью командной строки, вы можете увидеть все виды замечательного вывода. Однако допустим, у меня есть особенно болтливое Программирование, работающее как KINO, и я хочу просмотреть его вывод в любой момент без перезапуска через командную строку я не могу, по крайней мере, я не знаю как.

5 81

5 ответов:

здесь есть несколько вариантов. Один из них-перенаправить вывод команды в файл, а затем использовать "хвост" для просмотра новых строк, которые добавляются в этот файл в режиме реального времени.

другой вариант-запустить вашу программу внутри "экрана", который является своего рода текстовым терминальным приложением. Сеансы экрана могут быть прикреплены и отсоединены, но номинально предназначены только для использования одним и тем же пользователем, поэтому, если вы хотите поделиться ими между пользователями, это большая боль в заднице.

Я думаю, что у меня есть более простое решение здесь, просто найдите directoy, имя которого соответствует PID, который вы ищете, под псевдо-файловой системой, доступной под /proc путь. Поэтому, если у вас работает программа, чей идентификатор 1199, cd в нее:

$ cd /proc/1199

тогда ищи

Я ищу то же самое, и обнаружил, что вы можете сделать:

strace -ewrite -p $PID

не совсем то, что тебе нужно, но его довольно близко

я попробовал перенаправление вывода, но это не сработало для меня, мне так писать в сокет, я не знаю

Как бы я 'прикрепить' a консоль/терминал-вид на вывод приложений, чтобы я мог видеть, что это может говорить?

об этом вопросе я знаю, что можно поймать вывод, даже если вы не запустили команду sceen перед запуском processus.

хотя я никогда не пробовал, я нашел интересную статью, в которой объясняется, как использовать GDB (и без перезапуска вашего процесс.)

перенаправление-вывод-из-работающего-процесса

по сути:

  1. проверьте список открытых файлов для вашего процесса, благодаря /proc / xxx / fd
  2. прикрепить ваш процесс с GDB
  3. в то время как он сделал паузу, закрыть файл, который вы заинтересованы в, называя закрыть() функция (вы можете любую функцию вашего процесса в GDB. Я подозреваю, что вам нужны отладочные символы ваш процесс..)
  4. откройте новый файл, вызывающий create () или функция open (). (Посмотрите в комментариях в конце, вы увидите, что люди предлагают использовать dup2() чтобы обеспечить тот же дескриптор будет использоваться)
  5. отключить процесс и пусть работает.

кстати, если вы используете ОС linux на i386 box, комментарии говорят о лучшем инструменте для перенаправления вывода на новую консоль : 'retty' . Если это так, рассмотрите его использование.

Я хотел удаленно наблюдать за процессом обновления yum, который был запущен локально, поэтому, хотя, вероятно, были более эффективные способы сделать это, вот что я сделал:

смотреть cat / dev / vcsa1

очевидно, что вы хотите использовать vcsa2, vcsa3 и т. д., В зависимости от того, какой терминал используется.

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