void dump_all_task_info() { struct task_struct *frst_tsk; struct task_struct *curr_tsk; struct task_struct *frst_thr; struct task_struct *curr_thr; printk ( "\n" ); printk ( " current proc: %d %s\n", current->pid, current->comm ); printk ( "-----------------------------------------------------------------------------------\n" ); printk ( " pid uTime sTime exec(ns) stat cpu task_struct\n" ); printk ( "-----------------------------------------------------------------------------------\n" ); //process frst_tsk = &init_task; curr_tsk = frst_tsk; while(curr_tsk != NULL ) { dump_one_task_info( curr_tsk, true); //threads if( curr_tsk->thread_group.next != NULL) { frst_thr = container_of( curr_tsk->thread_group.next, struct task_struct, thread_group ); curr_thr = frst_thr; if( frst_thr != curr_tsk) { while( curr_thr != curr_tsk) { dump_one_task_info( curr_thr, false); curr_thr = container_of( curr_thr->thread_group.next, struct task_struct, thread_group); if( curr_thr == curr_tsk) break; } } } curr_tsk = container_of( curr_tsk->tasks.next, struct task_struct, tasks); if(curr_tsk == frst_tsk) break; }
void dump_task_info(void) { struct task_struct *g, *p; pr_info("\n"); pr_info("current proc: %d %s\n", current->pid, current->comm); pr_info("-----------------------------------------------------------------------------------\n"); pr_info(" pid uTime sTime exec(ns) stat cpu task_struct\n"); pr_info("-----------------------------------------------------------------------------------\n"); do_each_thread(g, p) { if (p->state == TASK_RUNNING || p->state == TASK_UNINTERRUPTIBLE) dump_one_task_info(p); } while_each_thread(g, p); pr_info("-----------------------------------------------------------------------------------\n"); }