Jeder Prozess hat seine eigene FD-Tabelle (siehe http://en.wikipedia.org/wiki/File_descriptor ), andernfalls müsste Prozess A mit Prozess B über die Abgesandten (und nicht nur mit B, sondern auch mit allen anderen) kommunizieren Prozesse an der Maschine). Es reicht also nicht aus, die (interne) FD zu kennen. Sie müssen wissen, wohin diese FD zeigt:
$> 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
Wie Sie sehen können, gibt es in dem von mir verwendeten irc-client (irssi) einige offene FD. Stdin wird aus der Datei gelesen /dev/pts/1
. Da ich die Berechtigung habe, in diese Datei zu schreiben, bin ich in der Lage, Sachen in diese Datei zu pfeifen:
$> echo "/names" >> /dev/pts/1
Und zumindest wird etwas passieren. So können Sie die Ausgabe eines Programms in ein anderes umleiten, obwohl dies zu seltsamen Problemen führen kann.