有一个用户进程-1,它可以‘执行’第二个进程-2。当我不知道何时可以创建第二个进程时,我可以跟踪它吗?在不知道pid的情况下,我不能在dtrace脚本中同时使用'-p‘和'-c’选项,并且不想手动执行进程。
使用PID提供程序,我得到一个命名空间错误(函数不属于进程1)。我尝试了"::functio_name:entry /execname == "process-2"/ {},但这并不能为用户空间程序编译。
谢谢你的指点。
发布于 2015-11-12 01:39:34
我认为这个帖子可以帮助你。您需要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邮件列表的相关讨论:
如何跟踪父进程和子进程的libc模块?
当一个进程被stop()操作停止时,进程何时以及如何重新启动?
顺便说一句,您还可以参考Sergey Klyaus的 基于DTrace和SystemTap的动态跟踪来检查在进程创建中应该使用哪些探测:

https://stackoverflow.com/questions/33552731
复制相似问题