просмотр выходных данных уже запущенных процессов в linux
У меня есть процесс, который работает в фоновом режиме (сценарий sh), и мне интересно, можно ли просмотреть вывод этого процесса без необходимости прерывать его.
процесс выполняется каким-то приложением, иначе я бы прикрепил его к экрану для последующего просмотра. Это может занять час, чтобы закончить, и я хочу убедиться, что он работает нормально без ошибок.
2 ответов
для этого уже есть программа, которая использует ptrace(2) в linux,рэтти:
он работает, если ваша запущенная программа уже подключена к 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.
к сожалению, я не могу придумать программу это делает именно то, что вы хотите, поэтому я даю вам подсказку, как написать это самостоятельно. Удачи!