检索父pid

时间:2015-08-16 13:45:36

标签: linux kernel segmentation-fault

我是内核模块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故障,我必须重新启动机器(虚拟机)再试一次。

你们中的任何人都可以告诉我这有什么问题吗?

1 个答案:

答案 0 :(得分:0)

内核代码,特别是模块初始化代码,并不总是在某个进程的行为上运行。中断&调度程序相关代码在没有任何特定进程的情况下运行。

所以我猜你的task可能是NULL