哪个进程在Linux内核中调用syscall?

时间:2013-10-22 08:07:02

标签: process linux-kernel tracing system-calls

这看起来非常基本 - 将系统调用跟踪到用户调用 - 但我找不到任何答案。

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

这是内核回溯:

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

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

感谢。

1 个答案:

答案 0 :(得分:2)

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

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

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