【问题标题】:dtrace a user process which will run in futuredtrace 将在将来运行的用户进程
【发布时间】:2015-11-05 19:03:50
【问题描述】:

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

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

感谢任何指点。

【问题讨论】:

    标签: dtrace


    【解决方案1】:

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

    (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 来检查应该在进程创建中使用哪些探针:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-25
      • 2019-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-23
      • 2018-02-08
      相关资源
      最近更新 更多