dtrace 将来 运行 的用户进程

dtrace a user process which will run in future

有一个用户进程 1 可以 'exec' 第二个进程 2。当我不知道何时创建第二个 process-2 时,我可以 dtrace 吗?我不能在不知道 pid 的情况下将“-p”和“-c”选项与 dtrace 脚本一起使用,并且不想手动执行该过程。

使用 PID 提供程序时出现命名空间错误(函数不属于进程 1)。我试过“::functio_name:entry /execname == "process-2"/ {},但这不能为用户空间程序编译。

感谢您的指点。

我认为这个 post 可以帮助你。您需要 2 个 DTrace 脚本:

(1) 第一个脚本用于跟踪 process-2 何时启动。一旦开始 运行,启动另一个脚本来跟踪 process-2

# cat followfork.d
proc:::start
/ppid == $target/
{
    stop();
    printf("fork %d\n", pid);
   system("dtrace -qs child.d -p %d", pid);
}

(2) 第二个脚本跟踪重点函数:

# cat child.d
pid$target::function_name:entry
{
    ......
}

您也可以参考DTrace邮件列表上的相关讨论:
How to trace libc module of both parent andchild processes?
When a process is stopped by stop() action, when and how does the process is restarted?

顺便说一句,您还可以参考 Sergey Klyaus 的 Dynamic Tracing with DTrace & SystemTap 检查在进程创建中应该使用哪些探测器: