¿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.)?
Respuesta
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)
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*/
}
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.
- 1. ¿Qué técnica de Linux IPC usar?
- 2. observando la salida estándar de otro proceso
- 3. En Linux, ¿podría un proceso representar la GUI de otro proceso?
- 4. C# redirigir (canalizar) la salida del proceso a otro proceso
- 5. Tubos con nombre sin bloqueo
- 6. ¿Puedo compartir un descriptor de archivo en otro proceso en Linux o son locales para el proceso?
- 7. Leer la salida de eco de otro archivo PHP
- 8. ¿Cómo puedo leer la memoria de otro proceso en Python en Windows?
- 9. Tubos de rubí: ¿Cómo ato la salida de dos subprocesos?
- 10. ¿Ejecuta un proceso desde la memoria dentro de otro proceso?
- 11. ¿Cómo usar IPC sin ser un administrador local?
- 12. ¿Es posible UAC elevar un proceso sin iniciar otro proceso?
- 13. Cómo capturar stdout de otro proceso en Win32 sin latencia?
- 14. ¿Cómo hago una lectura de IPC sin bloqueo en Windows?
- 15. la ejecución de otro proceso sin GUI congelación
- 16. ¿Cómo puedo capturar la salida stdout de un proceso hijo?
- 17. La configuración de bondad de proceso (prioridad) no tiene ningún efecto en Linux
- 18. linux: programmatically get parent pid de otro proceso?
- 19. ¿Puedo usar la licencia Qt LGPL y vender mi aplicación sin ningún tipo de restricciones?
- 20. ¿Cómo puedo usar la función splice() de Linux para copiar un archivo a otro archivo?
- 21. Paramiko equivalente de controles pipline y tubos de entrada/salida
- 22. ¿Cómo puede un proceso interceptar stdout y stderr de otro proceso en Linux?
- 23. Cruz plataforma IPC
- 24. ¿Cómo puedo usar nohup para ejecutar el proceso como proceso en segundo plano en Linux?
- 25. Cómo redirigir la salida de qDebug, qAdvertencia, qCrítica, etc.
- 26. Captura de salida de proceso externo
- 27. tenedor() y tubos() en c
- 28. son tubos posix ligeros?
- 29. ¿Puede popen() hacer tubos bidireccionales como pipe() + fork()?
- 30. ¿Cómo leer los argumentos de línea de comando de otro proceso en C#?
¿Ha mirado cosas como LD_PRELOAD o ptrace? – ezpz