Cómo interceptar el stdout de un proceso unix. Arrancar y parar PipeManagement "en caliente"
4 participantes
Página 1 de 1.
Cómo interceptar el stdout de un proceso unix. Arrancar y parar PipeManagement "en caliente"
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
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
Cómo obtener el PID del proceso DvdPlayer
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
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
Re: Cómo interceptar el stdout de un proceso unix. Arrancar y parar PipeManagement "en caliente"
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.
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.
vic1972- Mensajes : 2260
Fecha de inscripción : 09/12/2009
Edad : 52
Localización : Malaga
Re: Cómo interceptar el stdout de un proceso unix. Arrancar y parar PipeManagement "en caliente"
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
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
Re: Cómo interceptar el stdout de un proceso unix. Arrancar y parar PipeManagement "en caliente"
Hola,
strace ya viene de serie en los custom firmwares
mientras tanto lo puedes pillar tambien aqui
http://dl.dropbox.com/u/684543/varios/ms450h/varios/strace
saludos
strace ya viene de serie en los custom firmwares
mientras tanto lo puedes pillar tambien aqui
http://dl.dropbox.com/u/684543/varios/ms450h/varios/strace
saludos
vic1972- Mensajes : 2260
Fecha de inscripción : 09/12/2009
Edad : 52
Localización : Malaga
Re: Cómo interceptar el stdout de un proceso unix. Arrancar y parar PipeManagement "en caliente"
Gracias. Veo que el que viene en el Harmony Pack y el de dropbox son idénticos. Pero no me funciona:vic1972 escribió:Hola, strace ya viene de serie en los custom firmwares [...]saludos
./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
Re: Cómo interceptar el stdout de un proceso unix. Arrancar y parar PipeManagement "en caliente"
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...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?
¿Alguna sugerencia (aparte de instalar Harmony Pack - v1.1)?
Saludos,
evr- Mensajes : 279
Fecha de inscripción : 12/10/2010
Re: Cómo interceptar el stdout de un proceso unix. Arrancar y parar PipeManagement "en caliente"
Hola, los PATH's para librerias se definen con la variable de entorno LD_LIBRARY_PATH.
Un Saludo.
Un Saludo.
JBL- Mensajes : 130
Fecha de inscripción : 06/09/2010
Localización : Madrid
Re: Cómo interceptar el stdout de un proceso unix. Arrancar y parar PipeManagement "en caliente"
¡Uff... qué torpe soy! Se me había olvidado lo básico. Ya lo tengo funcionando -- Gracias.JBL escribió:Hola, los PATH's para librerias se definen con la variable de entorno LD_LIBRARY_PATH.
Saludos,
evr- Mensajes : 279
Fecha de inscripción : 12/10/2010
Re: Cómo interceptar el stdout de un proceso unix. Arrancar y parar PipeManagement "en caliente"
No hombre, si yo te contara...
JBL- Mensajes : 130
Fecha de inscripción : 06/09/2010
Localización : Madrid
Temas similares
» hdd externo muy caliente
» Proceso de copiado en background
» Pipe Management.
» Nuevo firmware MS Harmony Pack v1.3 (9-Marzo-2011)
» PipeManagement causing 100% CPU load
» Proceso de copiado en background
» Pipe Management.
» Nuevo firmware MS Harmony Pack v1.3 (9-Marzo-2011)
» PipeManagement causing 100% CPU load
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.