dtrace 将在将来运行的用户进程
Posted
技术标签:
【中文标题】dtrace 将在将来运行的用户进程【英文标题】:dtrace a user process which will run in future 【发布时间】:2015-11-05 19:03:50 【问题描述】:有一个用户进程 1 可以“执行”第二个进程 2。当我不知道何时创建第二个 process-2 时,我可以 dtrace 吗?在不知道 pid 且不想手动执行进程的情况下,我不能在 dtrace 脚本中同时使用“-p”和“-c”选项。
使用 PID 提供程序时出现命名空间错误(函数不属于进程 1)。我试过 "::functio_name:entry /execname == "process-2"/ ,但这不能为用户空间程序编译。
感谢任何指点。
【问题讨论】:
【参考方案1】:我认为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 来检查应该在进程创建中使用哪些探针:
【讨论】:
以上是关于dtrace 将在将来运行的用户进程的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 dtrace 进行挂钟分析?或者,如何使用配置文件提供程序计算进程未运行的样本?
FreeBSD 用户空间 DTrace 和用户空间的转储函数参数