Ausgabe in eine Datei mit Dateideskriptor

768
markovuksanovic

Ich habe mich gefragt, ob es möglich ist, die Ausgabe eines Prozesses (in OS X / Linux) auf einen anderen Prozess umzuleiten, wenn ich die fd eines anderen Prozesses kenne. Zum Beispiel:

Ich öffne eine Datei mit vim: vim /tmp/test. Dies öffnet eine Datei und wenn ich lsof | grep testden Dateideskriptor herausfinde, bekomme ich:

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

Es sagt mir, dass FD 4 ist und dass es für Schreiben und Lesen offen ist.

Gibt es eine Möglichkeit, die Ausgabe eines anderen Prozesses auf diesen Dateideskriptor umzuleiten (z. B. echo 'test'> & 4 - das funktioniert nicht, aber Sie haben die Idee)?

4

1 Antwort auf die Frage

4
akira

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.