这看起来非常基本 - 将系统调用跟踪到用户调用 - 但我找不到任何答案。
我们正在运行一些测试频繁系统调用的Linux内核代码。 当频率高于阈值时,我打印出内核反向跟踪。 缺少的是与系统调用的用户进程回溯的关联。 基本上我需要的是从系统调用(在内核模式下)检查哪些用户进程(和函数)正在调用它。
这是内核回溯:
do_gettimeofday+0x43/0xc0
compat_sys_time+0x10/0x40
sysenter_do_call+0x1b/0x67
如何找到调用系统调用的进程? 过程中的哪个州? 我可以使用一些ptrace / strace机制来实现吗? 这些信息是否在内核堆栈中可用?
感谢。
答案 0 :(得分:2)
current
结构将为您提供当前正在执行的任务的信息。您可以跟踪当前结构指针或pid(current->pid
)。
任务结构的完整定义可以在include/linux/sched.h中找到。
current
的通用声明可在include/asm-generic/current.h中找到。