4

Мне было интересно, можно ли перенаправить вывод одного процесса (в OS X/ Linux) на другой процесс, если я знаю fd другого процесса. Например:

Я открываю файл с помощью vim: vim /tmp/test . Это открывает файл, и когда я использую lsof | grep test чтобы узнать дескриптор файла, который я получаю:

vim    18689 user    4u     REG     1,2     12288 2675530 /private/tmp/.test.swp

Он говорит мне, что FD 4, и что он открыт для записи и чтения.

Есть ли способ, которым я могу теперь перенаправить вывод другого процесса в этот дескриптор файла (например, echo 'test'> & 4 - это не работает, но вы поняли идею)?

1 ответ1

4

Каждый процесс имеет свою собственную FD-таблицу (см. Http://en.wikipedia.org/wiki/File_descriptor ), в противном случае процесс A должен был бы общаться с процессом B о файловых дескрипторах (и не только с B, но и со всеми остальными). процессы на машине). Таким образом, просто зная (внутренний) FD недостаточно, вам нужно знать, на что указывает этот FD:

$> ls /proc/2964/fd
total 0
lrwx------ 1 user group 64 Okt  6 15:09 0 -> /dev/pts/1
lrwx------ 1 user group 64 Okt  6 15:09 1 -> /dev/pts/1
lrwx------ 1 user group 64 Okt  6 15:09 2 -> /dev/pts/1
lrwx------ 1 user group 64 Okt  6 15:09 3 -> [eventfd]
lrwx------ 1 user group 64 Okt  6 15:09 4 -> socket:[1116342098]
l-wx------ 1 user group 64 Okt  6 15:09 5 -> /home/user/.irssi/logs/freenode/#channel.2014-10.log
lrwx------ 1 user group 64 Okt  6 15:09 6 -> [eventfd]
l-wx------ 1 user group 64 Okt  7 19:09 9 -> /home/user/.irssi/away.log

Как видите, в используемом мной irc-клиенте есть несколько открытых файлов (irssi), stdin читается из файла /dev/pts/1 . Учитывая, что у меня есть разрешения на запись в этот файл, я могу передать данные в этот файл:

$> echo "/names" >> /dev/pts/1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .