obtener posicion en un file descriptor??

Eduardo Silva edsiper en gmail.com
Mar Feb 3 18:01:07 CLST 2009


Algo mas simple seria hacer un programa/script (en python ? :D ) para
invocar el comando deseado y capturar cuando ha leido y escrito el proceso,
ej:

mystat.py cat archivo.txt

al momento de arranque de mystat.py, lanza el comando deseado, captura el
PID y vas leyendo continuamente /proc/PID/io (read_bytes)...

salu2.-

Ed.-

2009/2/3 Aldrin Martoq <amartoq en dcc.uchile.cl>

> On Sat, 2009-01-31 at 21:44 -0300, Daniel Serpell wrote:
> > El problema es que no resuelve la pregunta original, ya que el parche de
> > biblioteca se debe aplicar *antes* de iniciar el programa.
>
> Yep, segun segui buscando y creo que systemtap puede entregar el $pos de
> un fd (y eso cumple mis requerimientos), pero no he tenido tiempo de
> probar (ademas que systemtap no viene por default AFAIK).
>
> Otra opcion que vi _sin modificar los programas_ seria armar un modulo
> del kernel que ponga un archivo especial en /proc, y uno de el PID y
> tire un mapa de los archivos. Ej:
>
> # echo $PID > /proc/fdmaps
> #fd #pos
> 0 -1
> 1 -1
> 2 -1
> 3 545345
>
> Internamente deberia encontrar el task dado un pid, iterar sobre
> task->files y llamar al llseek interno (vfs_lseek creo que era)...
>
> > Claro, uno podría mediante GDB inyectar código adicional en tiempo de
> > ejecución, pero eso es bastante complejo.
>
> Gracias Daniel, estuvo interesante! Pero no me atreveria a pichicatear
> un programa ya corriendo con GDB (ni tu solucion ni inyectar codigo).
>
>
> La solucion de dd y pv estan buenas y no las conocia (en particular la
> ultima), el problema es que tienes que reprogramar tus scripts o las
> cosas que estan andando... y hay software que no puedes modificar de
> esta forma (ej: una base de datos).
>
>
> Slds,
> --
> Aldrin Martoq <amartoq en dcc.uchile.cl>
> http://aldrin.martoq.cl/videopodcast/ http://aldrin.martoq.cl/techblog/
>



-- 
Eduardo Silva
http://edsiper.linuxchile.cl


Más información sobre la lista de distribución Linux