opensnoop 遵循 children 模式
opensnoop with follow children mode
opensnoop
来自 DTrace
可以显示哪些文件被 program/pid 打开。但它不会跟踪 forked/vforked children 打开。相关 dtruss
具有此跟随功能。
有没有办法让 opensnoop
也关注 children?
-p
选项实际上添加 PID == pid
检查生成的脚本,其中 pid
是 built 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 */
}
opensnoop
来自 DTrace
可以显示哪些文件被 program/pid 打开。但它不会跟踪 forked/vforked children 打开。相关 dtruss
具有此跟随功能。
有没有办法让 opensnoop
也关注 children?
-p
选项实际上添加 PID == pid
检查生成的脚本,其中 pid
是 built 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 */
}