线性任务树中for_each_process之后的内核模块错误

时间:2018-12-12 17:13:00

标签: c kernel

我正在尝试编译一个程序以线性列出任务,这样,如果运行ps -el命令,则应具有相同或相似的输出。我的课本说: “在Linux内核中,for_each_process()宏可以轻松地迭代系统中所有当前任务:

#include //linux/sched.h //

struct task_struct * task;

for_each_process(任务){

每个迭代任务上的

/ *指向下一个任务* /

}”

所以我有以下内容:

#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/sched.h>


int tasks_lister_linear_init(void)
{
  printk(KERN_INFO "Loading module...\n");

  struct task_struct *task;

  for_each_process(task)
  {
    printk(KERN_INFO "pid: %d | pname: %s | state: %ld\n", task->pid, task- 
   >comm, task->state);
  }

  printk(KERN_INFO "Module loaded.\n");
  return 0;
}

void tasks_lister_linear_exit(void)
{
  printk(KERN_INFO "Module removed.\n");
}

module_init(tasks_lister_linear_init);
module_exit(tasks_lister_linear_exit);

当我制作时,我得到一个错误,说我的意思是for_each_node而不是for_each_process,因为它期望一个;在for_each_process之后,但我看到的对此调用的每个调用都没有分号。对于这些错误的任何建议将不胜感激

1 个答案:

答案 0 :(得分:0)

您可能使用的是较新的内核版本。在后来的内核中,for_each_process 宏被移到了

#include <linux/sched/signal.h>

代替

#include <linux/sched.h>