opensnoop 遵循 children 模式

opensnoop with follow children mode

opensnoop 来自 DTrace 可以显示哪些文件被 program/pid 打开。但它不会跟踪 forked/vforked children 打开。相关 dtruss 具有此跟随功能。

有没有办法让 opensnoop 也关注 children?

-p 选项实际上添加 PID == pid 检查生成的脚本,其中 pidbuilt in variable,代表当前进程 ID,PID-p 选项值。

DTrace 中有一个名为 progenyof 的操作,它检查当前进程是否是进程的子进程(不一定是直接进程),因此只需在 opensnoop 中替换该检查:

--- /usr/dtrace/DTT/opensnoop   Wed Jun 25 01:34:47 2014
+++ opensnoop   Fri Jan 13 17:43:41 2017
@@ -199,7 +199,7 @@

        /* check each filter */
        (OPT_name == 1 && NAME == execname) ? self->ok = 1 : 1;
-       (OPT_pid == 1 && PID == pid) ? self->ok = 1 : 1;
+       (OPT_pid == 1 && progenyof(PID)) ? self->ok = 1 : 1;
        /* OPT_file is checked on return to ensure pathp is mapped */
}