Linux kernel internally refers processes as tasks. Kernel stores the list of processes in a circular doubly linked list called the task list. Each task/process is represented in kernel with struct task_struct (defined in ). This data structure (task_struct) is huge (1.7 Kilobytes) containing all the information about a specific process. Let's write a module/device driver which reads the circular linked list and prints the following information for us: --> Process Name --> Process ID --> Process State Before that, we should know what are the different states a process can be: TASK_RUNNING(R): Process is either currently running or on a run-queue waiting to run TASK_INTERRUPTIBLE(S): Process is sleeping/blocked. Can be runnable/awaken by a signal TASK_UNINTERRUPTIBLE(D): Similar to TASK_INTERRUPTIBLE, but does not wakeup on a signal __TASK_STOPPED(T): Process execution has stopped. This happens when the task receives SIGSTOP, SIGTSTP, SIGTTIN or SIGTTOU signal or if it receives any signal while it is being debugged. You can find the states using ps -el command