Linux: я могу считать вывод другого процесса, не используя IPC (каналы, и т.д.)?

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

6
задан zbigh 30 June 2010 в 11:26
поделиться

3 ответа

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

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

1
ответ дан 17 December 2019 в 22:10
поделиться

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

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

1
ответ дан 17 December 2019 в 22:10
поделиться

Простое использование функции 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*/

  }
-1
ответ дан 17 December 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: