просмотр выходных данных уже запущенных процессов в linux

У меня есть процесс, который работает в фоновом режиме (сценарий sh), и мне интересно, можно ли просмотреть вывод этого процесса без необходимости прерывать его.

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

2 ответов


для этого уже есть программа, которая использует ptrace(2) в linux,рэтти:

http://pasky.or.cz/dev/retty/

он работает, если ваша запущенная программа уже подключена к tty, я не знаю, будет ли она работать, если вы запустите свою программу в фоновом режиме.

по крайней мере, это может дать некоторые хорошие подсказки. :)

вы, вероятно, можете восстановить код выхода из программы, используя ptrace(2), в противном случае просто присоединитесь к процессу используя gdb -p <pid>, и он будет напечатан когда программа умрет.

вы также можете управлять файловыми дескрипторами с помощью gdb:

(gdb) p close(1)
 = 0
(gdb) p creat("/tmp/stdout", 0600)
 = 1

http://etbe.coker.com.au/2008/02/27/redirecting-output-from-a-running-process/


вы можете попробовать подключиться к /proc/[pid]/fd/[012] тройной, но, вероятно, это не сработает.

следующая идея, которая приходит мне на ум, это strace -p [pid], но вы получите вывод "prittified". Возможным решением является strace себя, написав крошечную программу, используя ptrace(2) подключиться write(2) и запись данных где-то. Это совместимость но это не делается за несколько секунд, особенно если вы не привыкли к программированию на C.

к сожалению, я не могу придумать программу это делает именно то, что вы хотите, поэтому я даю вам подсказку, как написать это самостоятельно. Удачи!