2010-06-30 8 views
6

È possibile in Linux leggere in qualche modo l'output (da stdout e stderr) di un altro processo senza che ne sia a conoscenza? Quindi diciamo che ho un processo A in esecuzione in background e il processo B vuole leggere il suo output - è possibile? Non posso usare pipe o il programma dello schermo. Ho provato a leggere da/proc/xxx/fd o da/pts/x console e così via, ma niente ha funzionato finora.Linux: posso leggere l'output di un altro processo senza utilizzare alcun IPC (pipe, ecc.)?

+0

Hai guardato cose come LD_PRELOAD o ptrace? – ezpz

risposta

1

Nel kernel, credo che si possa scrivere un driver che aggancia le letture e le scritture per ottenere ciò che si desidera.

Nello spazio Utente è possibile compilare un glibc modificato che esegue il logout di output stdout stdout & in alcuni file insieme all'ID di processo e di thread, ad esempio. Ma è rischioso se rompi qualcosa. (Applicazioni supponendo che si vuole tracciare non sono collegate in modo statico o effettuare chiamate di sistema dirette al kernel)

-1

Semplicemente utilizzando il dup2 funzione:

int b_fd; /* This is the B process File descriptor*/ 
int a_fd /* This is the A process File descriptor*/ 

int main (int argc, char*argv[]){ 
    /** I suppose that you can init the file descriptor for A*/ 
    dup2(b_fd, a_fd); 
    /**Now everything that A will output will be written in B file descriptor*/ 

    } 
1

ho letto l'implicazione della tua domanda che sei non si tratta di scrivere il codice del kernel, e che l'idea non è quella di modificare l'eseguibile che si sta spiando.

Dati tali limiti, la risposta è semplice. No, non puoi. Il processo chiama write (1, o write (2, e quelli potrebbero andare ovunque, e non c'è alcuna "intercettazione" integrata nel sistema per aiutarti a vedere il traffico.)