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
Vous devez vous connecter pour publier un commentaire.
C'est un peu vieux, mais je suis venu à travers elle, comme il semble être l'un des projets de programmation se trouvent dans le chapitre 3 de Concepts du Système d'exploitation 9e Édition, alors que d'autres peuvent encore venu le chercher.
Le code que vous avez commencé avec est directement à partir de la livre, mais c'est un bon point de départ. Vous avez juste besoin de mettre en œuvre la DFS. Voici le code qui va l'accomplir, il devrait être assez explicite:
list_entry(list, struct task_struct, sibling);
devrait êtrelist_entry(list, struct task_struct, children);
mais il doesent travail. Pouvez-vous s'il vous plaît expliquez-moi ce que suis missng?OriginalL'auteur tam5
vous pouvez obtenir de l'état avec
task->state /* -1 unrunnable, 0 runnable, >0 stopped */
obtenir le parent pid avec
task->parent->pid
OriginalL'auteur joe
Pour uid, tgid vous pouvez vous référer cred structure task_struct. De priorité, vous pouvez vous référer rt_priority(en temps réel de priorité) et prio champ. Pour les autres domaines vous pouvez consulter le répertoire proc (Parce que le ps va prendre une entrée de proc).
OriginalL'auteur Amar