0

这似乎很基本 - 将系统调用跟踪到用户调用 - 但我找不到任何答案。

我们正在运行一些测量频繁系统调用的 Linux 内核代码。当频率高于阈值时,我正在打印内核回溯。缺少的是与系统调用的用户进程回溯的关联。所以基本上我需要的是一些从系统调用(在内核模式下)检查的方法,哪个用户进程(和函数)正在调用它。

这是内核回溯:

do_gettimeofday+0x43/0xc0
compat_sys_time+0x10/0x40
sysenter_do_call+0x1b/0x67

如何找到正在调用系统调用的进程?进程处于哪个状态?我可以使用一些 ptrace/strace 机制来实现吗?这些信息在内核堆栈中可用吗?

谢谢。

4

1 回答 1

3

current结构将为您提供当前执行任务的信息。您可以跟踪当前结构指针或 pid ( current->pid)。

任务结构的完整定义可以在include/linux/sched.h中找到。

的通用声明current可以在include/asm-generic/current.h中找到。

于 2013-10-22T09:08:06.117 回答