我在Ubuntu 10.04上运行的GTK程序挂起可中断状态,我想了解strace
的输出。特别是,我有这一行:
read(5, 0x2ba9ac4, 4096) = -1 EAGAIN (Resource temporarily unavailable)
我怀疑5
是文件描述符,0x2ba9ac4
是要读取的文件中的地址,4096
是要读取的数据量。你确定吗?更重要的是,如何确定程序尝试读取哪个文件? /proc/pid/fd
中不存在此文件描述符(这可能是程序挂起的原因)。
答案 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