current-> pid如何为linux工作?

ran*_*ech 9 c linux process

我需要加入图书馆吗?任何人都可以详细说明吗?

我知道用于获取正在调用的当前任务的进程ID

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

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

......并且给了我一个错误

error: dereferencing pointer to incomplete type

cni*_*tar 13

你在找#include <linux/sched.h>.这task_struct是宣布的地方.


bet*_*ido 7

你的代码应该有效.你可能错过了一些标题.

current是一个定义的per-cpu变量linux/arch/x86/include/asm/current.h(所有代码都是针对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()
Run Code Online (Sandbox Code Playgroud)

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
    ...
};
Run Code Online (Sandbox Code Playgroud)

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