Chinaunix首页 | 论坛 | 博客
  • 博客访问: 309958
  • 博文数量: 55
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 615
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-07 13:47
文章分类
文章存档

2011年(1)

2010年(2)

2009年(14)

2008年(38)

我的朋友

分类: LINUX

2009-03-02 00:43:05

我写了一个小小的程序,是使用list_for_each打印出所有进程的名字,但是出现了一些问题!
问题描述如下:

**************************************************************
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/list.h>
#include <linux/types.h>

void mps(void);
static int __init my_init(void)
{

    printk("Hello, myps!..........\n");

    mps();
    return 0;
}


static void __exit my_cleanup(void)
{
    printk("Goodbye, myps!\n");   
}

module_init(my_init);
module_exit(my_cleanup);

void mps(void)
{
    struct list_head task_list_head = current->tasks;   
    struct list_head *pos;
   
    list_for_each(pos, &task_list_head)
    {
   
        printk("%s,", list_entry((pos), struct task_struct, tasks)->comm );
        //这里我用break让其之运行了一次,则是可以从dmesg看出其打印出来的内容的。
        break;
    }   

}
编译之后,加载模块之后
[root@localhost error]# insmod mps.ko
[root@localhost error]# dmesg
Hello, myps!..........
udevd,
[root@localhost error]# rmmod mps
Goodbye, myps!

*************************************************************
如果我把上面的代码修改成如下的形式(其实就是把刚才的break注释掉),则当我再次加载模块的时候,系统就会崩溃。
*************************************************************
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/list.h>
#include <linux/types.h>

void mps(void);
static int __init my_init(void)
{

    printk("Hello, myps!..........\n");

    mps();
    return 0;
}


static void __exit my_cleanup(void)
{
    printk("Goodbye, myps!\n");   
}

module_init(my_init);
module_exit(my_cleanup);

void mps(void)
{
    struct list_head task_list_head = current->tasks;   
    struct list_head *pos;
   
    list_for_each(pos, &task_list_head)
    {
   
        printk("%s,", list_entry((pos), struct task_struct, tasks)->comm );
        //break;
    }   

}
*************************************************************
[root@localhost error]#insmod mps.ko    //系统就会死在这里面,需要重启才行。
*************************************************************




是不是list_for_each这个宏的用法不对呢?但是我上网查了一些资料,不知道问题出在哪里。

阅读(1198) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~