• 打印进程号(pid)


      我们知道linux是模块化的内核。实现模块、利用kernel提供的接口,

    首先了解写模块的基本框架。下面的c文件就是最基本的框架,

    当然还有怎样添加一些符号变量,利用的module_param,没用上。

      c文件printPid.c

     1 #include <linux/kernel.h>
     2 #include <linux/module.h>
     3 #include <linux/init.h>
     4 #include <linux/sched.h>
     5 #include <linux/list.h>
     6 
     7 static __init int printPid(void) //安装模块函数
     8 {
     9     struct task_struct *task,*p;
    10     struct list_head *ps;
    11     int count=0;
    12     printk("begin.\n");
    13     task=&init_task;
    14     list_for_each(ps,&task->tasks)
    15     {
    16         p=list_entry(ps,struct task_struct,tasks);
    17         count++;
    18         printk("%d\t%s\n",p->pid,p->comm);
    19     }
    20     printk("Process counts:%d\n",count);
    21     return 0;
    22 }
    23 static __exit void exitPid(void)  //卸载函数
    24 {
    25     printk("exit!\n");
    26 }
    27 module_init(printPid); //实现的函数必须放入其中
    28 module_exit(exitPid);

    makefile:

    1 KDIR:=/lib/modules/$(shell uname -r)/build
    2 PWD:=$(shell pwd)
    3 all:
    4     $(MAKE) -C $(KDIR)  M=$(PWD) modules
    5 clean:
    6     $(MAKE) -C $(KDIR) M=$(PWD) modules clean
    7     rm -f *.o    
    8 
    9 obj-m   :=pid.o 

    make后会生成pid.ko文件。

    然后用这几个命令:

    #安装模块
    sudo insmod pid 
    
    #显示日志信息
    dmesg
    
    #显示挂载的挂载的所有模块
    lsmod
    
    #卸载
    sudo rmmod pid 

      这仅仅是比较简单的,kernel要学还有很长的路......

  • 相关阅读:
    二元查找树的后序遍历结果
    CFileDialog设置多选时的一个问题
    KanRSS.com
    由shuttle这个单词想起的一个小故事
    Sun Java moved to the Partner repository
    Sun Java moved to the Partner repository
    扩展std::string功能的几个做法
    NetBeans 时事通讯(刊号 # 99 Apr 16, 2010)
    NetBeans IDE 6.9 Beta 发布
    KanRSS.com
  • 原文地址:https://www.cnblogs.com/wuchaofan/p/3003902.html
Copyright © 2020-2023  润新知