È 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.)?
risposta
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)
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*/
}
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.)
Hai guardato cose come LD_PRELOAD o ptrace? – ezpz