我是内核模块progrmming的新手。在我的程序中,我需要显示进程名称及其父进程的pid。
以下是我的simple_init()函数
int simple_init(void){
printk(KERN_INFO "--------------Starting module--------------\n");
struct task_struct *intask = &init_task;
struct list_head fd = intask->children;
struct list_head *list;
struct task_struct *task;
int k =0;
list_for_each(list, &fd){
task = list_entry(list, struct task_struct, sibling);
struct task_struct *parent = task->parent;
pid_t parent_pid = parent -> pid;
printk(KERN_INFO "Name: %s ---- %d ----Parent: %d\n",task->comm, task->pid, parent_pid);
if (k==2) break;
k++;
}
return 0;
}
问题是我添加了这行后:
struct task_struct *parent = task->parent;
现在,当我运行insmod命令时它说Segementation故障,我必须重新启动机器(虚拟机)再试一次。
你们中的任何人都可以告诉我这有什么问题吗?
答案 0 :(得分:0)
内核代码,特别是模块初始化代码,并不总是在某个进程的行为上运行。中断&调度程序相关代码在没有任何特定进程的情况下运行。
所以我猜你的task
可能是NULL