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 检查在进程创建中应该使用哪些探测器:
有一个用户进程 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 检查在进程创建中应该使用哪些探测器: