Cómo interceptar el stdout de un proceso unix. Arrancar y parar PipeManagement "en caliente"

Ir abajo

Cómo interceptar el stdout de un proceso unix. Arrancar y parar PipeManagement "en caliente"

Mensaje  alonso_c el Miér Jul 21, 2010 12:58 pm

Existe un comando en unix: strace, que se encarga de interceptar la salida de un proceso. La mayor utilidad que le veo es el poder arrancarlo y pararlo "en caliente" sin necesidad de reiniciar el Living Box.

Uso:
strace -ff -e trace=write -e write=1,2 -p XXXX 2>&1

donde XXXX es el PID del proceso del cual queremos saber que esta imprimiendo en pantalla.
Podemos obtener el PID mediante el comando ps.

Si quieremos redirigir la salida a un programa PipeManagement:
/usr/local/etc/strace -ff -e trace=write -e write=1,2 -p XXXX 2>&1 | /usr/local/etc/PipeManagement

Ejecutable strace para MIPS32:
/www.mediafire.com/?1ox9yldd9y8

Más información en:
http://zerugiran.solar-opensource.com/zerugiran/index.php/blog/show/Como-interceptar-el-stdout-de-un-proceso,-Unix-Linux.html
http://forum.opentvix.com/viewtopic.php?f=6&t=54


Última edición por alonso_c el Miér Jul 21, 2010 1:36 pm, editado 1 vez

alonso_c

Mensajes : 72
Fecha de inscripción : 11/03/2010

Ver perfil de usuario

Volver arriba Ir abajo

Cómo obtener el PID del proceso DvdPlayer

Mensaje  alonso_c el Miér Jul 21, 2010 1:30 pm

Ejecutando el comando:

cat /tmp/lock/.DvdPlayer

nos indicará el PID del proceso DvdPlayer.

Uso con strace:
/usr/local/etc/strace -ff -e trace=write -e write=1,2 -p `cat /tmp/lock/.DvdPlayer` 2>&1

/usr/local/etc/strace -ff -e trace=write -e write=1,2 -p `cat /tmp/lock/.DvdPlayer` 2>&1 | /usr/local/etc/PipeManagement

alonso_c

Mensajes : 72
Fecha de inscripción : 11/03/2010

Ver perfil de usuario

Volver arriba Ir abajo

Re: Cómo interceptar el stdout de un proceso unix. Arrancar y parar PipeManagement "en caliente"

Mensaje  vic1972 el Lun Ago 09, 2010 10:31 pm

Hola,
gracias por el aporte
muy muy muy interesante.

De hecho gracias a esta idea he optimizado aun mas nuestro querido aparato.
Ya que el pipe directamente al dvdplayer es algo delicado.

Asi que es mejor hacer el parseo de una forma indirecta, como tu indicas.

Hay un solo pero, el strace que tu comentas no viene disponible de serie en el busybox, ni siquiera en la ultima version.
El link que tu propones el ejecutable pesa casi 1 mega, y estamos algo limitados de espacio.
Dejo tu idea pendiente, a la espera de que salga alguna version de busybox que lo incluya.

en cualquier caso, la formas mas optima a dia de hoy, y que sera incluida con segurada en el siguiente custom sera:

poner esta linea al final de rcS
tail -f /tmp/appout | /usr/local/etc/PipeManagement/PipeManagement &


y rcS las llamadas advdplayer quedan:

tail -f /tmp/command_sender.txt | ./RootApp DvdPlayer > /tmp/appout &
else
echo Running dvdplayer
tail -f /tmp/command_sender.txt | ./DvdPlayer > /tmp/appout &
fi



De esta manera se evitan posibles reseteos en caso de que el parser salga de ejecución por cualquier tema.

Tambien creo que soluciona el tema del bloque con display a OFF cuando apagamos la máquina, ya que desde que lo
tengo de esta manera nunca mas me a ocurrido, no se si sera casualidad, pero ya llevo un tiempo puesto de esta manera.






avatar
vic1972

Mensajes : 2260
Fecha de inscripción : 09/12/2009
Edad : 45
Localización : Malaga

Ver perfil de usuario

Volver arriba Ir abajo

Re: Cómo interceptar el stdout de un proceso unix. Arrancar y parar PipeManagement "en caliente"

Mensaje  evr el Sáb Dic 11, 2010 9:24 pm

Hola alonso_c,
Parece que el enlace de strace compilado para lmipsel que mencionas en tu mensaje

/www.mediafire.com/?1ox9yldd9y8

ya no funciona. ¿Sabes si hay una copia en algún otro sitio?

Gracias,
EVR

evr

Mensajes : 279
Fecha de inscripción : 12/10/2010

Ver perfil de usuario

Volver arriba Ir abajo

Re: Cómo interceptar el stdout de un proceso unix. Arrancar y parar PipeManagement "en caliente"

Mensaje  vic1972 el Dom Dic 12, 2010 10:47 am

Hola,
strace ya viene de serie en los custom firmwares Wink
mientras tanto lo puedes pillar tambien aqui
http://dl.dropbox.com/u/684543/varios/ms450h/varios/strace
saludos
avatar
vic1972

Mensajes : 2260
Fecha de inscripción : 09/12/2009
Edad : 45
Localización : Malaga

Ver perfil de usuario

Volver arriba Ir abajo

Re: Cómo interceptar el stdout de un proceso unix. Arrancar y parar PipeManagement "en caliente"

Mensaje  evr el Dom Dic 12, 2010 5:01 pm

vic1972 escribió:Hola, strace ya viene de serie en los custom firmwares Wink [...]saludos
Gracias. Veo que el que viene en el Harmony Pack y el de dropbox son idénticos. Pero no me funciona:

./strace: can't load library 'libgcc_s.so.1'

De momento sigo trabajando con el firmware original. La librería que le falta a esta versión de strace ¿viene en el Hhrmony Pack - v1.1?

Saludos, EVR.

evr

Mensajes : 279
Fecha de inscripción : 12/10/2010

Ver perfil de usuario

Volver arriba Ir abajo

Re: Cómo interceptar el stdout de un proceso unix. Arrancar y parar PipeManagement "en caliente"

Mensaje  evr el Dom Dic 12, 2010 5:56 pm

evr escribió:[...] De momento sigo trabajando con el firmware original. La librería que le falta a esta versión de strace ¿viene en el Hahrmony Pack - v1.1?
Me contesto a mí mismo: Sí viene ;) pero no sé dónde la podría poner para que strace la viera -- en el MS500 no viene ldd ni ldconfig, ni veo por ningún sitio algo parecido a /etc/ld.so.cache...

¿Alguna sugerencia (aparte de instalar Harmony Pack - v1.1)?

Saludos,

evr

Mensajes : 279
Fecha de inscripción : 12/10/2010

Ver perfil de usuario

Volver arriba Ir abajo

Re: Cómo interceptar el stdout de un proceso unix. Arrancar y parar PipeManagement "en caliente"

Mensaje  JBL el Lun Dic 13, 2010 11:49 am

Hola, los PATH's para librerias se definen con la variable de entorno LD_LIBRARY_PATH.

Un Saludo.

JBL

Mensajes : 130
Fecha de inscripción : 06/09/2010
Localización : Madrid

Ver perfil de usuario

Volver arriba Ir abajo

Re: Cómo interceptar el stdout de un proceso unix. Arrancar y parar PipeManagement "en caliente"

Mensaje  evr el Lun Dic 13, 2010 4:58 pm

JBL escribió:Hola, los PATH's para librerias se definen con la variable de entorno LD_LIBRARY_PATH.
¡Uff... qué torpe soy! Se me había olvidado lo básico. Ya lo tengo funcionando -- Gracias.

Saludos,

evr

Mensajes : 279
Fecha de inscripción : 12/10/2010

Ver perfil de usuario

Volver arriba Ir abajo

Re: Cómo interceptar el stdout de un proceso unix. Arrancar y parar PipeManagement "en caliente"

Mensaje  JBL el Lun Dic 13, 2010 5:40 pm

No hombre, si yo te contara...

JBL

Mensajes : 130
Fecha de inscripción : 06/09/2010
Localización : Madrid

Ver perfil de usuario

Volver arriba Ir abajo

Re: Cómo interceptar el stdout de un proceso unix. Arrancar y parar PipeManagement "en caliente"

Mensaje  Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.