Właściwy sposób obsługi wątków w jądrze?
Widziałem wszędzie fragmenty rozproszonych informacji, ale nie mogę uzyskać jednej ostatecznej odpowiedzi. Jak wyczyścić wątek zombie w jądrze?
Aby się upewnić i stworzyć ostateczny poprawny sposób obsługi wątków w jądrze, chciałbym zadać to pytanie szerzej.Jak tworzyć, kończyć i czyścić wątek w jądrze Linux?
Do tej pory mam to:
thread_func:
exited = 0;
while (!must_exit)
do stuff
exited = 1;
do_exit(0)
init_module:
must_exit = 0;
exited = 1;
kthread_run(thread_func, ...) /* creates and runs the thread */
cleanup_module:
must_exit = 1;
while (!exited)
set_current_state(TASK_INTERRUPTIBLE);
msleep(1);
/* How do I cleanup? */
Najbliższą rzeczą, jaką znalazłem w rozwiązaniu czyszczącym, jestrelease_task, ale nie znalazłem nigdzie o tym mówić. Wyobrażałem sobie, że funkcje wątku sąkthread_create
, kthread_run
itp., powinno byćkthread_join
lubkthread_wait
, ale nie było.do_wait
również wydawało się prawdopodobne, ale nie wymagastruct task_struct *
.
Ponadto nie jestem pewien, czydo_exit
jest dobrym pomysłem, a jeśli to konieczne, koniecznym. Czy ktoś może wymyślić minimalny szkic tego, jak należy utworzyć, zakończyć i wyczyścić kthread?