dtrace将来运行的用户进程

时间:2015-11-05 19:03:50

标签: dtrace

有一个用户进程-1可以执行'第二个过程-2。当我不知道何时可以创建它时,我可以跟踪第二个过程吗?我不能同时使用' -p'和' -c'使用dtrace脚本的选项,但不知道pid,也不想手动执行该过程。

使用PID提供程序我得到命名空间错误(不属于进程1的函数)。我尝试了#34; :: functio_name:entry / execname ==" process-2" / {},但这并没有为用户空间程序编译。

感谢您的任何指示。

1 个答案:

答案 0 :(得分: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来检查在创建流程时应使用哪些探针:
enter image description here