opensnoop
的 DTrace
可以显示程序/ pid打开的文件。但它不会跟踪分叉/ vforked孩子打开。相关dtruss
具有以下功能。
有没有办法告诉opensnoop
也跟着孩子?
答案 0 :(得分:2)
-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 */
}