首页 文章

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

提问于
浏览
0

这看起来很基本 - 跟踪系统调用到用户调用 - 但我找不到任何答案 .

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

这是内核回溯:

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

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

谢谢 .

1 回答

  • 2

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

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

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

相关问题