首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux上的strace不会记录对open()的所有调用

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

Stack Overflow用户
提问于 2016-04-14 02:59:00
回答 2查看 1.2K关注 0票数 5

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

例如,starting strace:

strace -f -e trace=open,close,read -o/tmp/strace.out -p62881

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

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

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

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

我遗漏了什么?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2018-08-18 12:45:49

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

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

票数 7
EN

Stack Overflow用户

发布于 2016-04-14 04:32:16

尝试-ff (除了-f之外):

代码语言:javascript
复制
-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.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36607245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档