【问题标题】:DTrace script never reports write syscallsDTrace 脚本从不报告写入系统调用
【发布时间】:2013-04-06 12:22:49
【问题描述】:

我正在使用以下 DTrace 脚本来跟踪 bash 的读写系统调用:

syscall::write:entry,
syscall::read:entry
/execname == "bash"/
{

}

它成功匹配了 2 个探针,但无论我输入什么,我都只看到读取调用。没有报告写调用。当 shell 回显到屏幕时,我期待得到 write 调用。

脚本是错误的,还是我对 bash 工作原理的假设有误?

我在 OSX Mountain Lion 下运行

【问题讨论】:

  • 如果不使用逗号单独定义它们,你会看到它们吗?

标签: macos bash osx-mountain-lion system-calls dtrace


【解决方案1】:

在“write”之后尝试使用通配符。这将列出匹配的探针:

sudo dtrace -l -n 'syscall::write*:entry'

这可能会得到你期望的输出:

syscall::write*:entry,
syscall::read*:entry
/execname == "bash"/
{

}

正在使用的电话可能是write_nocancel

【讨论】:

  • 那里没有太多东西。 Apple 有一个名为 Symbol Variants: Why Those Dollar Signs? 的发行说明,其中提及符号变体带有 $NOCANCEL 后缀。这些是库覆盖函数,但它们包装的系统调用实际上有一个_nocancel 后缀。但是,它所说的所有关于它们的内容都是“内部使用的”。我相信它们与pthread cancellation有关。
  • 谢谢!我很惊讶我在谷歌上几乎找不到任何提及。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
相关资源
最近更新 更多