sobre [heap] (stat: no such file or directory)

Arturo Mardones katador en gmail.com
Mie Abr 12 11:36:34 CLT 2006


On 4/12/06, Alvaro Herrera <alvherre en commandprompt.com> wrote:
> Arturo Mardones escribió:
>
> > en el caso de fedora esta es la salida del lsof
> > yum.cron 4210 root  cwd    DIR    3,1    4096       2 /
> > yum.cron 4210 root  rtd    DIR    3,1    4096       2 /
> > yum.cron 4210 root  txt    REG    3,1  686520 4504403 /bin/bash
> > yum.cron 4210 root  mem    REG    3,1  126576 3361930 /lib/ld-2.3.6.so
> > yum.cron 4210 root  mem    REG    3,1 1481808 3361932 /lib/libc-2.3.6.so
> > yum.cron 4210 root  mem    REG    3,1   16244 3361940 /lib/libdl-2.3.6.so
> > yum.cron 4210 root  mem    REG    3,1   12924 3363057 /lib/libtermcap.so.2.0.8
> > yum.cron 4210 root  mem    REG    0,0               0 [heap] (stat: No such file or directory)
> > yum.cron 4210 root    0r  FIFO    0,6          380590 pipe
> > yum.cron 4210 root    1w  FIFO    0,6          381449 pipe
> > yum.cron 4210 root    2w  FIFO    0,6          381449 pipe
> > yum.cron 4210 root  255r   REG    3,1     158  981265 /etc/cron.daily/yum.cron
>
> Yo me imagino que lo que esto significa es que yum tiene abierto un
> archivo que fue borrado del sistema de archivos despues que lo abrio.
> Probablemente es un archivo temporal.
>
> Un experimento simple sirve para verificar esta hipotesis.  Creese un
> programa que abra un archivo y luego se quede dormido:
>
> cat > test.c <<EOF
> #include <sys/types.h>
> #include <sys/stat.h>
> #include <fcntl.h>
> #include <unistd.h>
>
> int main(int argc, char **argv)
> {
>         open("/tmp/hola", O_CREAT);
>         sleep(1000);
>         return 1;
> }
> EOF
>
> Luego compilese y ejecutese.  En mitad de la ejecucion, borrese /tmp/hola.
> Verifiquese lsof antes y despues de borrar el archivo.
>
> 09:59  drizzt ~ 0$ gcc -Wall test.c
> 09:59  drizzt ~ 0$ ./a.out
>
> [en otro terminal]
>
> 10:00  drizzt ~ 0$ lsof -p `pgrep a.out`
> lsof: WARNING: can't stat() xfs file system /dev/.static/dev
>       Output information may be incomplete.
> COMMAND   PID     USER   FD   TYPE DEVICE    SIZE     NODE NAME
> a.out   24087 alvherre  cwd    DIR   34,5    9544      365 /home/alvherre
> a.out   24087 alvherre  rtd    DIR   34,1    4096      128 /
> a.out   24087 alvherre  txt    REG   34,5    6997   800237 /home/alvherre/a.out
> a.out   24087 alvherre  mem    REG   34,1 1266832 12583757 /lib/tls/i686/cmov/libc-2.3.6.so
> a.out   24087 alvherre  mem    REG   34,1   92264  8389627 /lib/ld-2.3.6.so
> a.out   24087 alvherre  mem    REG    0,0                0 [stack] (stat: No such file or directory)
> a.out   24087 alvherre    0u   CHR  136,8               10 /dev/pts/8
> a.out   24087 alvherre    1u   CHR  136,8               10 /dev/pts/8
> a.out   24087 alvherre    2u   CHR  136,8               10 /dev/pts/8
> a.out   24087 alvherre    3r   REG   34,1       0 29502933 /tmp/hola
> 10:00  drizzt ~ 0$ rm /tmp/hola
> rm: ¿borrar el fichero regular vacío «/tmp/hola»  protegido contra escritura? (s/n) y
> 10:00  drizzt ~ 0$ lsof -p `pgrep a.out`
> lsof: WARNING: can't stat() xfs file system /dev/.static/dev
>       Output information may be incomplete.
> COMMAND   PID     USER   FD   TYPE DEVICE    SIZE     NODE NAME
> a.out   24087 alvherre  cwd    DIR   34,5    9544      365 /home/alvherre
> a.out   24087 alvherre  rtd    DIR   34,1    4096      128 /
> a.out   24087 alvherre  txt    REG   34,5    6997   800237 /home/alvherre/a.out
> a.out   24087 alvherre  mem    REG   34,1 1266832 12583757 /lib/tls/i686/cmov/libc-2.3.6.so
> a.out   24087 alvherre  mem    REG   34,1   92264  8389627 /lib/ld-2.3.6.so
> a.out   24087 alvherre  mem    REG    0,0                0 [stack] (stat: No such file or directory)
> a.out   24087 alvherre    0u   CHR  136,8               10 /dev/pts/8
> a.out   24087 alvherre    1u   CHR  136,8               10 /dev/pts/8
> a.out   24087 alvherre    2u   CHR  136,8               10 /dev/pts/8
> a.out   24087 alvherre    3r   REG   34,1       0 29502933 /tmp/hola (deleted)
>
>
> Conclusion: la hipotesis no es valida :-)  Observese en todo caso que
> aparece un mensaje semejante, solo que en vez de estar el file
> destriptor en el heap, esta en el stack.  Cual es la importancia de
> esto, la desconozco.
>
> Otra conclusion: el que aparezca esto en lsof no es signo de gran cosa.
>
> --
> Alvaro Herrera                                http://www.CommandPrompt.com/
> PostgreSQL Replication, Consulting, Custom Development, 24x7 support
>

pero el hecho de que aparezca esto puede significar q el proceso este
pegado? o por x motivo la cosa es de muuuuuuuuuy largo proceso no
mas... pq lo unico q estaba haciendo en mandriva era instalar los
paquetes  postgresql-server, postgresql-libs, postgresql-doc, otros
dos mas creo y el pgadmin3 eso.... y trabajo toda la noche... encontre
q era mucho no?...
saludos,

Arturo



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