The linux kernel, as any other system, has a lot of proccesses running at any given time.
The task_struct structure defined in sched.h stores all the details of every process that exists in the system, and all the processes in turn are stored in a circular double linked list.
Just to undertand the how to access the fields of task_struct and iterate through the various tasks in the system, here is a simlple module that creates a proc entry which when read, lists out all name and pid of all the processes running currently.
The code makes use of a macro called "for_each_process" which is defined in "linux/sched.h". This function iterate through the list of all the processes.
In the read_proc function, "for_each_process" is called, which assigns to the variable task_list, which is of the kind "struct task_struct", the task_struct structure of one process after another as they are stored in the linked list in the kernel.
The task_list in turn is used to print the name ,task_list->comm, and the pid, task_list->pid of the process.
To see the output use the following makefile.
Run the following commands
In the output you should see a list of process names and their pids for eg.
To understand about proc entries and creating proc entries you can refer to the posts "Creating proc entry"
The task_struct structure defined in sched.h stores all the details of every process that exists in the system, and all the processes in turn are stored in a circular double linked list.
Just to undertand the how to access the fields of task_struct and iterate through the various tasks in the system, here is a simlple module that creates a proc entry which when read, lists out all name and pid of all the processes running currently.
The code makes use of a macro called "for_each_process" which is defined in "linux/sched.h". This function iterate through the list of all the processes.
In the read_proc function, "for_each_process" is called, which assigns to the variable task_list, which is of the kind "struct task_struct", the task_struct structure of one process after another as they are stored in the linked list in the kernel.
The task_list in turn is used to print the name ,task_list->comm, and the pid, task_list->pid of the process.
To see the output use the following makefile.
Run the following commands
In the output you should see a list of process names and their pids for eg.
To understand about proc entries and creating proc entries you can refer to the posts "Creating proc entry"
Hey man, your my new hero!
ReplyDeleteI'm new to kernel programming, kernel modules & device drivers. While the "Linux Device Drivers" book has "Hello World!" (Ch 2) it then dives into a character based device driver (Ch 3). I just wanted something simple to duplicate and start understanding LKMs some. Your example is exactly what I needed.
Thanks!