如何编写stap(systemtap)来查看某个进程是否调用了特定的内核函数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何编写stap(systemtap)来查看某个进程是否调用了特定的内核函数?相关的知识,希望对你有一定的参考价值。

使用stap,我可以写* .stp文件

跟踪流程的操作,如:

probe process("mytest").begin
{
    printf("Caught mytest process")
}

或者跟踪任何进程是否调用了内核函数:

probe kernel.function("do_exit").call #all processes
{
    printf("called kernel/exit.c: do_exit\n")
}

但我的要求是:跟踪来自特定进程名称的内核函数调用,例如跟踪“mytest”进程调用的“sys_open”。

如何写这个.stp语句/函数?谢谢!

答案

我找到了一种方法:使用一个指示程序名称的变量

global prog_name = "mytest";
probe kernel.function("do_exit").call
{
   if(execname() == progname){
        printf("called kernel/exit.c: do_exit\n");     
   }

}

以上是关于如何编写stap(systemtap)来查看某个进程是否调用了特定的内核函数?的主要内容,如果未能解决你的问题,请参考以下文章

Systemtap: learning notes

REDHAT 7.3 INSTALL SYSTEMTAP

Profiling Java Application with Systemtap

火焰图分析openresty性能瓶颈

SystemTap 脚本分析函数的缓存行为

systemtap [主设备号,次设备好,inode]监控文件