动手实践-打印进程描述符task_struct
#include<linux/kernel.h>
#include<linux/module.h>
#include<linux/sched.h>
#include<linux/init_task.h>
#include<linux/fdtable.h>
#include<linux/fs_struct.h>
#include<asm/atomic.h>
#include<linux/types.h>
#include<linux/mm_types.h>
MODULE_LICENSE("GPL");
static int __init print_pcb(void)
{
struct task_struct *task,*p;
struct list_head *pos;
int count=0;
printk("begin:\n");
task=&init_task;
list_for_each(pos,&task->tasks)
{
p=list_entry(pos,struct task_struct,tasks);
count++;
printk("\n\n");
printk("pid:%d; parent'pid:%d; files'count:%d; fs'umask:%d;",p->pid,(p->parent)->pid,
atomic_read(&((p->files)->count)),(p->fs)->umask);
if(p->mm!=NULL)
printk("total_vm:%ld",(p->mm)->total_vm);
}
printk("进程数:%d\n",count);
return 0;
}
static void __exit exit_pcb(void)
{
printk("task_struct_print is exiting...\n");
}
module_init(print_pcb);
module_exit(exit_pcb);