Maneira correta de lidar com threads no kernel?
Eu vi pedaços de informações espalhadas por toda parte, mas parece que não consigo chegar a uma resposta final. Como você limpa um thread de zumbis no kernel?
Apenas para ter certeza, e produzir uma maneira final e correta de lidar com threads no kernel, eu gostaria de fazer essa pergunta mais amplamente.Como você cria, encerra e limpa um thread no kernel do Linux?
O que eu tenho até agora é isto:
<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>
A coisa mais próxima que encontrei da solução de limpeza érelease_task, mas eu não encontrei nenhum lugar falando sobre isso. Eu imaginei desde as funções de thread sãokthread_create
, kthread_run
etc, deve haver umkthread_join
oukthread_wait
, mas não houve.do_wait
também parecia provável, mas não é precisostruct task_struct *
.
Além disso, não tenho certeza sedo_exit
é uma boa ideia ou, se for necessário, também. Alguém pode, por favor, fazer o esboço mínimo de como um kthread deve ser criado, terminado e limpo?