如何激活 sh DTrace Provider?

How to activate sh DTrace Provider?

我在 2007 年发现了 patches (and updates) 的 x86 sh 二进制文件以支持 sh DTrace 提供程序。

但是我在 OS X 上找不到任何探测器。我正在检查:

$ sudo dtrace -l | grep command-entry

参见:/bin/sh DTrace Provider at Oracle site (same article on blog)

可能是因为我的 sh 和 GNU bash 一样?

$ /bin/sh --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15)

这些探测器在哪里实施,我如何找到它们或如何激活它们?

是否仅在 Solaris 上实现?

您提到的补丁是针对 Solaris 上的 bourne shell 的,据我所知,它从未被移植到其他 shell。

在 illumos(née OpenSolaris)提交历史中,我们可以看到 /bin/sh 在 2010 年 3 月 2 日的提交 ead1f93 中被更改为指向 ksh93 的符号链接。考虑到Alan 的博客 post 的日期是 2007 年,这并没有包含在 Solaris 10 中,至少自从 Solaris 10 于 2005 年发布以来最初没有。它 可能 在其中一个更新 post 2007 但我有点怀疑。从现有代码中,我什至找不到在切换到 ksh 之前提供的内容 /bin/sh,这可能意味着它是封闭位之一。

无论如何,它从来都不是任何 illumos 版本的一部分,而且我在 illumos 提交历史记录中没有看到任何对 command-entry 的 dtrace 探测的引用。除非 Alan 或其他熟悉此事的人可以说出来,否则它可能已经过时了。

总而言之,据我所知,这些补丁从未包含在 Sun 或其他公司发布的任何产品中。它几乎肯定必须在任何现有的开源 shell.

上从头开始重新实现

我从未将它添加到 public Solaris 中的 bourne shell(尽管我获得了 PSARC 的批准)因为在测试时我发现 bourne 的一些主要性能问题shell 分叉。为了解决这个问题,我必须将其迁移到使用 posix_spawn()。考虑到我们在 Solaris 11 中不再使用这个 shell,这是一项毫无结果的工作。我还没有放弃去其他 shells,但这不是我的当务之急。

将探针移动到另一个 shell 应该很轻松,除了当我们有复合变量时决定 return 作为 "variable-assign" 中的先验值。