Linux 上的 strace 不记录对 open() 的所有调用

Jim*_*her 5 linux multithreading strace

我正在使用 strace 在 Linux 上捕获对 open()、close() 和 read() 的调用。目标进程是 jetty Web 服务器。据我所知,strace 没有记录所有对 open() 的调用。也许其他人也是如此,我还没有尝试将文件描述符与 open() 调用相关联。

例如,开始 strace:

strace -f -e 跟踪=打开、关闭、读取 -o/tmp/strace.out -p62881

然后我使用 wget 获取 100 个静态文件;都成功找回了。在一次运行中,只记录了 56 个打开的事件;在另一次运行 100 个不同的文件时,我得到了 66 个打开的事件。

我相信使用“-f”会导致 strace 附加到线程的所有 LWPID(“进程 62881 附加了 25 个线程 - 中断退出”);当我尝试使用多个“-p”选项显式附加到所有人时,我收到一条“附加”成功消息,但收到多个“不允许操作的消息”,每个子 PID 一个。

在我的测试之前,我重新启动了 Jetty 以清除其缓存。

内核版本为 2.6.32-504.3.3.el6.x86_64 (Red Hat)。Strace 软件包版本为 strace-4.5.19-1.19.el6.x86_64。

我错过了什么?

谢谢

Abh*_*hak 6

在某些系统上,您必须使用 openat() 而不是 open()。

尝试: strace -f -e trace=openat,close,read -o/tmp/strace.out -p62881


Ked*_*ade 0

尝试-ff(除了-f):

-ff: If the -o filename option is in effect, each processes trace is written to filename.pid  where  pid  is
     the  numeric process id of each process.  This is incompatible with -c, since no per-process counts are
     kept.
Run Code Online (Sandbox Code Playgroud)