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?

questionAnswers(1)

yourAnswerToTheQuestion