在Ubuntu上遍历进程时 用的函数是 for_each_process(task) 结果给我报错 代码与错误结果如下 不知道应该怎么改
你的task指针都是空的,你让他从哪里开始遍历啊
首先结构体指针task定义时没有初始化为NULL,其次指针没有具体指向,直接引用野指针
从楼主贴的代码上看不出来获取了task指针后做了什么操作,猜测错误可能更楼主没贴上来的代码有关,但具体还得把编译时报错的信息贴上来才能知道。
附上一个示例代码和Makefile文件供参考:
文件名:test.c
#include
#include
#include
static int __init functn_init(void)
{
int ret=0;
struct task_struct *task;
printk(KERN_INFO "insmod test modules.\n");
for_each_process(task)
printk(KERN_INFO "pid:%d,task_name:%s\n",task->pid,task->comm);
return ret;
}
static void __exit functn_cleanup(void)
{
printk(KERN_INFO "exit test modules!\n");
}
module_init(functn_init);
module_exit(functn_cleanup);
MODULE_LICENSE("GPL");
Makefile文件内容:
ifneq ($(KERNELRELEASE),)
obj-m := test.o
else
PWD := $(shell pwd)
KDIR :=/home/kernel/kernel-3.10.0-693/
all:
$(MAKE) -C $(KDIR) M=$(PWD)
clean:
rm -rf .*.cmd *.o *.mod.c *.ko .tmp_versions *.symvers *.order
endif
从贴的代码上看,没看出啥问题。可以把具体的报错信息贴出来看下吧。
我之前学习的时候做过一个类似的。你可参考一下子
源码
Makefile
第四行改成
#include