Правильный способ обработки потоков в ядре?

Я видел обрывки разбросанной повсюду информации, но, кажется, не могу найти окончательного ответа. Как очистить поток зомби в ядре?

Просто чтобы убедиться и создать окончательный правильный способ обработки потоков в ядре, я хотел бы задать этот вопрос более широко.Как создать, завершить и очистить поток в ядре 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?

15
задан Shahbaz 16 April 2012 в 16:03
поделиться