Le module du noyau qui effectue une itération sur toutes les tâches à l'aide de parcours en profondeur d'abord de l'arbre

Donc je sais comment créer un noyau et d'itérer sur les processus linéaire Simplement en incluant linux/sched.h et en utilisant le code suivant:

struct task_struct *task;

for_each_process(task)
{
   printk("Name: %s PID: [%d]\n", task->comm, task->pid);
}

Comment puis-je imprimer ces tâches à l'aide d'un parcours en profondeur d'abord de recherche? Je veux mon résultat similaire à celui de ps -eLf.

Le patch suivant du code a été donné pour référence:

struct task_struct *task;
struct list_head *list;
list_for_each(list, &init_task->children) {
    task = list_entry(list, struct task_struct, sibling);
    /* task points to the next child in the list */
}

et je sais que task->comm renvoie le nom et task->pid retourne le PID pour cette tâche.

Quelles commandes sont utilisées pour retourner à l'état et parent pid?

Vous avez besoin de mettre en œuvre DFS ou BFS. Googler autour de vous mènera à l'algorithme. Il n'y a pas de support pour DFS ou BFS dans le noyau si vous cherchez de l'API.

OriginalL'auteur Hassan Jalil | 2013-10-06