захват stderr и stdout из уже запущенного процесса в солярисе - PullRequest
2 голосов
/ 08 октября 2009

У меня есть процесс, который в настоящее время выполняется (arserverd), который был запущен пользователем «лекарство». Я могу войти как этот пользователь. Я хотел бы захватить stderr и stdout без перезапуска процесса. Возможно ли это?

Ответы [ 2 ]

4 голосов
/ 10 октября 2009

Если процесс уже запущен, вы можете использовать команду truss для перехвата записи в дескриптор файла 1 или 2:

truss -w 1,2 -p pid_of_arserverd

Ферма будет выводить строки как

write(1, " m e s s a g e\n", 8)                     = 8

Ферма специфична для Solaris. В системах linux ищите strace.

Ферма замедлит процесс, над которым вы работаете, так что вы не захотите использовать это все время. Если вы ищете постоянное решение, вам лучше всего перенаправить stdout и stderr в файл при запуске программы. Вы можете регулярно обрезать файл, чтобы сохранить его размер управляемым. Альтернативой является запуск программы в сеансе screen, к которому вы можете подключиться, когда хотите взаимодействовать с программой.

0 голосов
/ 08 октября 2009

Я так не думаю, но вы можете попробовать прочитать из /proc/PID/fd/1 для stdout и /proc/PID/fd/2 для stderr (замените PID на PID процесса).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...