Я видел обрывки разбросанной повсюду информации, но, кажется, не могу найти окончательного ответа. Как очистить поток зомби в ядре?
Просто чтобы убедиться и создать окончательный правильный способ обработки потоков в ядре, я хотел бы задать этот вопрос более широко.Как создать, завершить и очистить поток в ядре Linux?
На данный момент у меня есть следующее:
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? */
Самое близкое к решению очистки, которое я нашел, это release_task, но я не нашел нигде, чтобы говорить об этом. Я предположил, что, поскольку функции потока kthread_create
, kthread_run
и т. д., должен быть kthread_join
или kthread_wait
, но его не было. do_wait
тоже кажется вероятным, но он не требует struct task_struct *
.
Кроме того, я не уверен, является ли do_exit
хорошей идеей, и вообще ли она необходима. Может ли кто-нибудь придумать минимальный набросок того, как должен создаваться, завершаться и очищаться kthread?