Memory 识别导致strace挂起的文件
我有一个GTK程序运行在Ubuntu10.04上,挂起时处于可中断状态,我想了解Memory 识别导致strace挂起的文件,memory,gtk,ubuntu-10.04,strace,Memory,Gtk,Ubuntu 10.04,Strace,我有一个GTK程序运行在Ubuntu10.04上,挂起时处于可中断状态,我想了解strace的输出。特别是,我有这一行: read(5, 0x2ba9ac4, 4096) = -1 EAGAIN (Resource temporarily unavailable) 我怀疑5是文件描述符,0x2ba9ac4是此文件中要读取的地址,4096是要读取的数据量。你能证实吗?更重要的是,如何确定程序试图读取的文件?此文件描述符在/proc/pid/fd中不存在(这可能是程序挂起的原因)。读取()的第二个
strace
的输出。特别是,我有这一行:
read(5, 0x2ba9ac4, 4096) = -1 EAGAIN (Resource temporarily unavailable)
我怀疑
5
是文件描述符,0x2ba9ac4
是此文件中要读取的地址,4096
是要读取的数据量。你能证实吗?更重要的是,如何确定程序试图读取的文件?此文件描述符在/proc/pid/fd
中不存在(这可能是程序挂起的原因)。读取()的第二个参数仅是目标指针,它要求从文件描述符5读取,最大4096字节。有关read()
的信息,请参阅。通过调用strace-o log-eopen,读取程序,可以找到使用此文件描述符的文件。然后在日志
文件中搜索对感兴趣的读取的调用。从此行(而不是从文件的第一行),向上搜索此文件描述符的第一个匹配项(通过调用open
返回)
例如,这里,open
返回的文件描述符是3:
open("/etc/ld.so.cache", O_RDONLY) = 3
添加到@liberforce answer,如果进程已经在运行,则可以使用lsof获取文件名
成形斜射
[pid 7529] read(102, 0x7fedc64c2fd0, 16) = -1 EAGAIN (Resource temporarily unavailable)
现在,用lsof
lsof -p 7529 | grep 102
java 7529 luis 102u 0000 0,9 0 9178 anon_inode
是的,我想出来了,有没有办法识别与文件描述符5关联的文件?这指向/etc/passwd
。。。我是否可以确保它是正确的,即文件描述符是否有可能被open
以外的另一个函数修改?谢谢如果它是第一个在错误的读取
上方使用此文件描述符打开的
,那么是的,该文件就是该文件。仅当对文件描述符调用了close
时,才能重用该文件描述符。如果要确定,请使用-eopen、read、close
。文件描述符与相应的open
和close
之间的文件唯一关联。