关于progenyof()
函数的介绍:
int progenyof(pid_t pid)
progenyof returns non-zero if the calling process (the process associated with the thread that is currently triggering the matched probe) is among the progeny of the specified process ID.
也就是当前触发probe
的进程是progenyof()
参数pid
的“子孙进程”,progenyof()
返回非0
值;反正返回0
。参考下面例子(运行在FreeBSD
系统上):
# cat progeny.d
#!/usr/sbin/dtrace -qs
BEGIN
{
printf("%-10s%-8s\n", "ancestor", "child");
}
proc:::create
/progenyof($1)/
{
printf("%-10i%-8i\n", pid, args[0]->p_pid);
}
打开一个shell
会话,得到当前shell
进程ID
:
# echo $$
2674
在另外一个shell
会话运行上面的progeny.d
脚本,追踪第一个shell
会话产生的进程:
# ./progeny.d 2674
在第一个shell
中执行命令,“./progeny.d 2674
”会产生下列输出:
# ./progeny.d 2674
ancestor child
2674 2748
2674 2749
参考资料:
DTrace Bugs on Mac。