【问题标题】:Which process is calling the syscall in Linux kernel?哪个进程正在调用 Linux 内核中的系统调用?
【发布时间】:2013-10-30 23:59:06
【问题描述】:

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

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

这是内核回溯:

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

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

谢谢。

【问题讨论】:

    标签: process linux-kernel trace system-calls


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      • 2014-05-17
      • 2014-01-27
      • 2010-09-20
      • 2020-04-04
      • 2011-04-29
      • 1970-01-01
      相关资源
      最近更新 更多