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