Правильный способ обработки потоков в ядре?
Я видел повсюду разбросанную информацию, но, похоже, не могу найти окончательного ответа. Как вы очищаете зомби нить в ядре?
Просто для того, чтобы убедиться и выработать окончательный правильный способ обработки потоков в ядре, я хотел бы задать этот вопрос более широко.How do you create, terminate and clean up a thread in the Linux kernel?
То, что у меня так далеко, это:
<code>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? */ </code>
Самое близкое, что я нашел к решению для очистки, этоrelease_task, но я нигде не говорил об этом. Я представлял себе, так как функции потокаkthread_create
, kthread_run
и т. д., должно бытьkthread_join
или жеkthread_wait
, но не было.do_wait
также представляется вероятным, но это не займетstruct task_struct *
.
Кроме того, я не уверен, еслиdo_exit
это хорошая идея, или если вообще необходимо. Может кто-нибудь придумать минимальный набросок того, как kthread должен быть создан, завершен и очищен?