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