【问题标题】:how does current->pid work for linux?current->pid 如何为 linux 工作?
【发布时间】:2012-06-05 23:45:52
【问题描述】:

我需要包含一个库吗? 谁能详细说明一下?

我知道用于获取当前任务的进程ID,从中调用

但我想用 current->pid 打印一些东西

printk("My current process id/pid is %d\n", current->pid);

...给我一个错误

error: dereferencing pointer to incomplete type

【问题讨论】:

  • 你用的是什么版本的linux?

标签: c linux process


【解决方案1】:

您的代码应该可以工作。您可能缺少一些标题。

currentlinux/arch/x86/include/asm/current.h中定义的per-cpu变量(所有代码都是针对x86的情况):

DECLARE_PER_CPU(struct task_struct *, current_task);
static __always_inline struct task_struct *get_current(void)
{
    return percpu_read_stable(current_task);
}
#define current get_current()

current 指向在给定时刻在 CPU 上运行的任务。它的类型是struct task_struct,定义在linux/include/linux/sched.h:

struct task_struct {
    ...
    pid_t pid;   // process identifier
    pid_t tgid;  // process thread group id
    ...
};

您可以在Linux Cross Reference中浏览这些文件的代码:

【讨论】:

    【解决方案2】:

    您正在寻找#include <linux/sched.h>。这就是声明task_struct 的地方。

    【讨论】:

    • +1 我认为你确实回答了这个问题,而不是我。
    • @RobI 谢谢。我也不完全确定,但我认为问题是关于内核编程,考虑到previous question
    • #include <linux/kernel.h> 也是需要的。谢谢!
    【解决方案3】:

    我认为您正在寻找getpid() 系统调用。我不知道current 是什么。

    【讨论】:

      猜你喜欢
      • 2019-07-04
      • 2012-05-21
      • 2015-08-24
      • 1970-01-01
      • 2011-03-27
      • 2011-07-09
      • 2019-10-08
      • 1970-01-01
      相关资源
      最近更新 更多