识别导致strace挂起的文件

时间:2011-03-04 13:52:31

标签: memory gtk ubuntu-10.04 strace

我在Ubuntu 10.04上运行的GTK程序挂起可中断状态,我想了解strace的输出。特别是,我有这一行:

read(5, 0x2ba9ac4, 4096) = -1 EAGAIN (Resource temporarily unavailable)

我怀疑5是文件描述符,0x2ba9ac4是要读取的文件中的地址,4096是要读取的数据量。你确定吗?更重要的是,如何确定程序尝试读取哪个文件? /proc/pid/fd中不存在此文件描述符(这可能是程序挂起的原因)。

3 个答案:

答案 0 :(得分:8)

您可以通过调用strace -o log -eopen,read yourprogram找到使用此文件描述符的文件。然后在log文件中搜索感兴趣的read。从此行(而不是文件的第一行)向上搜索此文件描述符的第一个匹配项(通过调用open返回)。

例如,open返回的文件描述符为3:

open("/etc/ld.so.cache", O_RDONLY)      = 3

答案 1 :(得分:0)

read()的第二个参数只是目标指针,它要求从文件描述符5读取,最多4096个字节。有关read()的信息,请参见the manual page

答案 2 :(得分:0)

添加到@liberforce答案,如果该进程已在运行,您可以使用lsof获取文件名

form strace

[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