Просмотреть вывод уже запущенных процессов в Linux
У меня есть процесс, который работает в фоновом режиме (sh script), и мне интересно, можно ли просмотреть результат этого процесса без его прерывания.
Процесс запускается некоторым приложением, иначе я бы привязал его к экрану для последующего просмотра. Это может занять час, и я хочу убедиться, что он работает нормально, без ошибок.
Ответы
Ответ 1
Существует уже программа, которая использует ptrace (2) в linux для этого, retty:
http://pasky.or.cz/dev/retty/
Это работает, если ваша запущенная программа уже привязана к tty, я не знаю, будет ли она работать, если вы запустите свою программу в фоновом режиме.
По крайней мере, это может дать некоторые хорошие советы.:)
Возможно, вы, возможно, вернете код выхода из программы с помощью ptrace(2)
, иначе просто присоединитесь к процессу с помощью gdb -p <pid>
, и он будет напечатан, когда программа умрет.
Вы также можете манипулировать файловыми дескрипторами с помощью gdb:
(gdb) p close(1)
$1 = 0
(gdb) p creat("/tmp/stdout", 0600)
$2 = 1
http://etbe.coker.com.au/2008/02/27/redirecting-output-from-a-running-process/
Ответ 2
Вы можете попытаться подключиться к тройке /proc/[pid]/fd/[012]
, но, вероятно, это не сработает.
Следующая идея, которая появляется у меня на ум, - strace -p [pid]
, но вы получите "приглушенный" вывод. Возможное решение состоит в том, чтобы спрятать себя, написав небольшую программу, используя ptrace(2)
, чтобы подключиться к write(2)
и записать данные где-нибудь. Он будет работать, но не выполняется всего за несколько секунд, особенно если вы не используете программирование C.
К сожалению, я не могу придумать программу, которая делает именно то, что вы хотите, поэтому я даю вам подсказку, как написать ее самостоятельно. Удачи!