linux中for_each_process报错提示我用for_each_node该如何解决
时间: 2023-08-01 18:12:33 浏览: 185
在 Linux 内核版本 5.6 之后,for_each_process 已经被移除,推荐使用 for_each_process_thread 或者 for_each_thread 宏。如果你使用的是较新的内核版本,你可以尝试使用 for_each_thread。
如果你仍然想使用 for_each_process,你可以使用以下方法:
1. 在你的代码中添加以下宏定义:
```c
#define for_each_process(p) \
for (p = &init_task ; (p = next_task(p)) != &init_task ; )
```
这个宏定义会将 for_each_process 映射到 for 循环,使用起来与原来的 for_each_process 一样。但需要注意的是,这种方法仅适用于旧版内核,如果你使用的是新版内核,可能会存在一些问题。
2. 如果你使用的是新版内核,可以使用 for_each_thread 或 for_each_process_thread 宏。例如:
```c
struct task_struct *task;
for_each_thread(task) {
printk(KERN_INFO "pid=%d, comm=%s, state=%ld\n", task->pid, task->comm, task->state);
}
```
或者
```c
struct task_struct *task;
for_each_process_thread(g, p) {
printk(KERN_INFO "pid=%d, comm=%s, state=%ld\n", task->pid, task->comm, task->state);
}
```
这些宏定义可以遍历系统中的所有线程或进程,使用起来比较方便。
阅读全文