如何编写 stap (systemtap) 脚本来查看某个进程是否调用了特定的内核函数?
How to script stap (systemtap) to see if some process has called specific kernel function?
使用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怎么写statement/function?
谢谢!
我找到了一种方法:使用一个指示程序名称的变量
global prog_name = "mytest";
probe kernel.function("do_exit").call
{
if(execname() == progname){
printf("called kernel/exit.c: do_exit\n");
}
}
使用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怎么写statement/function? 谢谢!
我找到了一种方法:使用一个指示程序名称的变量
global prog_name = "mytest";
probe kernel.function("do_exit").call
{
if(execname() == progname){
printf("called kernel/exit.c: do_exit\n");
}
}