Linux: могу ли я прочитать вывод другого процесса, не используя IPC (каналы и т. Д.)? - PullRequest
6 голосов
/ 30 июня 2010

Возможно ли в Linux как-то прочитать вывод (из stdout и stderr) другого процесса, не зная об этом?Допустим, у меня есть процесс A, работающий в фоновом режиме, а процесс B хочет прочитать свой вывод - это возможно?Я не могу использовать трубы или экранную программу.Я пытался читать из / proc / xxx / fd или из / pts / x консолей и т. Д., Но пока ничего не получалось.

Ответы [ 3 ]

1 голос
/ 02 июля 2010

Я прочитал подтекст вашего вопроса, что вы не собираетесь писать код ядра, и что идея не в том, чтобы модифицировать исполняемый файл, на который вы шпионите.

Учитывая эти ограничения, ответ таков:просто.Нет, ты не можешь.Процесс вызывает write (1 или write (2), и они могут пойти куда угодно, и в систему не встроено положение «прослушивания», которое поможет вам увидеть трафик в пути.

1 голос
/ 30 июня 2010

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

В пространстве пользователя вы можете скомпилировать модифицированный glibc, который регистрирует вывод stdout & stderr в некоторый файл вместе с процессом и ID потока, например. Но это рискованно, если вы что-то сломаете. (при условии, что приложения, которые вы хотите отследить, не связаны статически или не выполняют прямые системные вызовы с ядром)

0 голосов
/ 30 июня 2010

Просто используя функцию dup2 :

int b_fd; /* This is the B process File descriptor*/
int a_fd /* This is the A process File descriptor*/  

 int main (int argc, char*argv[]){
     /** I suppose that you can init the file descriptor for A*/
     dup2( b_fd, a_fd);
     /**Now everything that A will output will be written in B file descriptor*/

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