我正在尝试编译一个程序以线性列出任务,这样,如果运行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之后,但我看到的对此调用的每个调用都没有分号。对于这些错误的任何建议将不胜感激
答案 0 :(得分:0)
您可能使用的是较新的内核版本。在后来的内核中,for_each_process 宏被移到了
#include <linux/sched/signal.h>
代替
#include <linux/sched.h>