Uscita in un file usando il descrittore di file


4

Mi chiedevo se fosse possibile reindirizzare l'output di un processo (in OS X / Linux) a un altro processo se conosco il nome di un altro processo. Per esempio:

Apro un file usando vim: vim /tmp/test. Questo apre un file e quando lo uso lsof | grep test per scoprire il descrittore di file ottengo:

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

Mi dice che FD è 4 e che è aperto per scrivere e leggere.

Esiste un modo per reindirizzare l'output di un altro processo a quel descrittore di file (ad esempio echo 'test' & gt; & amp; 4 - questo non funziona ma l'idea è stata ottenuta)?

Risposte:


4

Ogni processo ha il suo FD-table (vedi http://en.wikipedia.org/wiki/File_descriptor ), altrimenti il ​​processo A dovrebbe comunicare con il processo B riguardo ai fileescrittori (e non solo con B ma anche con tutti gli altri processi sulla macchina). Quindi, solo conoscendo il FD (interno) non è sufficiente, è necessario sapere dove questo FD punta a:

$> 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

Come puoi vedere, ci sono alcuni FD aperti nel client irc che uso (irssi), lo stdin viene letto dal file /dev/pts/1. Dato che ho i permessi per scrivere su quel file sono in grado di canalizzare cose in quel file:

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

E almeno succederà qualcosa. Quindi, puoi reindirizzare l'output di un programma in un altro, anche se ciò potrebbe portare a strani problemi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.