Threads dans le noyau
Création de threads dans le noyau
Certaines applications nécessitent l’usage de plusieurs threads.
L’interface <linux/kthread.h> propose des services simplifiés pour
leur création et leur destruction.
- La macro
kthread_runpermet de créer simplement un threadstruct task_struct* kthread_run( int (*threadfn)(void *data), data, namefmt,...);threadfnest la fonction implémentant le corps du threaddataest un pointeur sur des données passées au threadnamefmtest le nom du thread passé sous la forme d’un printf
- Pour stopper un thread, il suffit d’utiliser la fonction
kthread_stopint kthread_stop (struct task_struct *k); - La fonction
kthread_should_stopoffre un service au thread pour tester périodiquement s’il doit s’arrêter.int kthread_should_stop (void);
Le corps d’un thread créé avec l’interface kthread.h prend la forme suivante :
int thread (void* data)
{
while (!kthread_should_stop()) {
/* do something... */
}
return 0;
}
La commande ps permet de lister tous les threads et processus
La commande cat /proc/<pid>/stat permet d’afficher des informations
sur l’état du processus
On trouve facilement sur Internet de petits programmes offrant une représentation plus conviviale, par exemple : http://www.brokestream.com/procstat.html