Desde hace bastante tiempo había buscado como hacer lo siguiente: En Linux y en general en Unix a veces es necesario poner a correr un proceso y salir de la sesión, muchas veces ese proceso pinta algo en pantalla, mensajes o el estatus o lo que sea que envíe al stdout.
Pero luego despues de cierto tiempo, por ejemplo días, necesitamos ver que ese proceso esta imprimiendo, pero como esta corriendo en segundo plano ya no lo podemos ver, solo tenemos su PID.
No parece haber una forma sencilla de hacerlo, pero hay va una:
strace -ff -e trace=write -e write=1,2 -p XXXX 2>&1 | grep "EIO" | cut -d\" -f2
donde XXXX es el PID del proceso del cual queremos intervenir lo que imprime.
Notese que se usan tres comandos strace, grep y cut. El primero es para interceptar todo lo que el proceso hace, los parámetros filtran solo lo que el proceso escribe, grep lo usamos para filtrar la lineas que contengan la cadena "EIO" que corresponde con los que el proceso escribe el el stdout, finalmente cut parsea usando el carácter " como limitador y solo deja pasar el segundo.
Esto tambien sirve para otra cosas interesantes como, 'espiar' lo que otro usuario teclea en tiempo real en la consola, siempre y cuando seamos root.
Por ejemplo:
sudo strace -ff -e trace=write -e write=1,2 -p YYYY 2>&1 | cut -d\" -f2
donde YYYY el el PID de la consula de otro usuario, podemos obtener esos PID con:
sudo ps ax | grep @pts/
Solo puedes ver lo que el usuario escribe, mas no lo que el sistema responde.
Espero sea de utilidad para alguien :)



Dejar un comentario