Чтение вывода из любого процесса с помощью pid

20

Можно ли подключить терминал к уже запущенному процессу, используя его pid аналогично использованию команды fg для заданий.

    
задан Tommy 25.09.2012 в 11:45
источник

3 ответа

32

Вы можете получить стандартные дескрипторы файла этого процесса, например. stdout :

tail -f /proc/<pid>/fd/1
    
ответ дан user23368 25.09.2012 в 15:52
7

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

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

Если хотите, вы можете проследить процесс и посмотреть, что он делает с strace

$ strace -e trace=open -p 22254 -s 80 -o output.txt

-p PID : Attach to the process with the process ID pid and begin tracing.

-s SIZE : Specify the maximum string size to print (the default is 32).

-o filename : Write the trace output to the file filename rather than to screen (stderr).

    
ответ дан user61928 25.09.2012 в 11:59
3

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

  • retty (Man page: retty )
  • reptyr
  • screen

Пример:

screen -S PID
retty $(pgrep PID)
reptyr PID
    
ответ дан devav2 25.09.2012 в 12:19