Cada processo tem sua própria tabela FD (veja link ), caso contrário, o processo A teria que se comunicar com o processo B sobre os filedescriptors (e não apenas com B, mas também com todos os outros processos na máquina). Então, apenas sabendo que o FD (interno) não é suficiente, você precisa saber para onde este FD aponta:
$> 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
Como você pode ver, há algum FD aberto no irc-client que eu uso (irssi), stdin é lido do arquivo /dev/pts/1
. Dado que eu tenho as permissões para escrever para esse arquivo, sou capaz de canalizar coisas para esse arquivo:
$> echo "/names" >> /dev/pts/1
E pelo menos algo vai acontecer. Assim, você pode redirecionar a saída de um programa para outro, embora isso possa levar a problemas estranhos.