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

Alvaro Herrera alvherre en commandprompt.com
Mie Abr 12 10:05:36 CLT 2006


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


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