Memory 识别导致strace挂起的文件

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中不存在(这可能是程序挂起的原因)。读取()的第二个

我有一个GTK程序运行在Ubuntu10.04上,挂起时处于可中断状态,我想了解
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
之间的文件唯一关联。