2010-06-30 14 views
6

¿Es posible en Linux leer de algún modo la salida (de stdout y stderr) de otro proceso sin que lo sepa? Entonces digamos que tengo un proceso A ejecutándose en segundo plano y el proceso B quiere leer su salida, ¿es posible? No puedo usar pipes o el programa de pantalla. Intenté leer desde/proc/xxx/fd o desde/pts/x consolas, y así sucesivamente, pero nada funcionó hasta ahora.Linux: ¿puedo leer la salida de otro proceso sin usar ningún IPC (tubos, etc.)?

+0

¿Ha mirado cosas como LD_PRELOAD o ptrace? – ezpz

Respuesta

1

Supongo que en el kernel puede escribir un controlador que enganche las lecturas y escrituras para obtener lo que desea.

En el espacio de usuario puede compilar un glibc modificado que desconecta la salida stderout stdout & de algún archivo junto con el proceso y la identificación del subproceso, por ejemplo. Pero eso es arriesgado si rompes algo. (Suponiendo que las aplicaciones que desea rastrear no están vinculados de forma estática o hacer llamadas al sistema directos al kernel)

-1

Por el simple uso de la dup2 función:

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

leí la implicación de su pregunta que eres no va a escribir el código del núcleo, y que la idea no es modificar el ejecutable que está espiando.

Dadas esas limitaciones, la respuesta es simple. No, no puedes. El proceso llama a write (1, o write (2, y pueden ir a cualquier parte, y no hay una disposición 'wiretap' integrada en el sistema para ayudarlo a ver el tráfico en el camino.

Cuestiones relacionadas