Richtigen Umgang mit threads im kernel?

Ich habe gesehen, bits von verstreuten Informationen, die alle um, aber ich kann nicht scheinen, um zu einer endgültigen Antwort. Wie reinigt man ein zombie-thread im kernel?

Nur um sicher zu stellen, und produzieren eine endgültig richtige Art des Umgangs mit threads im kernel, würde ich gerne Fragen, diese Frage mehr allgemein. , Wie Sie tun Sie erstellen, beenden und bereinigen einen thread im Linux-kernel?

Was ich habe, so weit ist diese:

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? */

Die nächste Sache, die ich gefunden habe, um den cleanup-Lösung ist release_task, aber ich habe nicht, überall darüber zu reden. Ich habe mir vorgestellt, da die thread-Funktionen sind kthread_create, kthread_run etc, es sollte eine kthread_join oder kthread_wait, aber es war nicht. do_wait auch schien wahrscheinlich, aber es dauert gar nicht struct task_struct *.

Außerdem bin ich nicht sicher, ob do_exit ist eine gute Idee, oder wenn überhaupt notwendig. Kann mir bitte jemand kommen mit die minimale Skizze, wie ein kthread erstellt werden soll, beendet und aufgeräumt?

Ich glaube mich zu erinnern, dass es eine kthread_stop, oder kthread_should_stop, so etwas wie, dass.
den Weg habe ich verstanden, Sie entweder über die Ausfahrt selbst (mithilfe do_exit) oder poll kthread_should_stop bis jemand (cleanup_module) fordert kthread_stop. Ich finde nicht überall zu sagen, ob kthread_stop reinigt auch den Faden oder nicht. Was mich wundert ist, dass, wenn die Leute (im internet) empfehlen die Verwendung von entweder do_exit oder was auch immer, nicht sollte es sein, einen Weg zu Bereinigung der thread nach do_exit?
Durch die Art und Weise, dieser ist, was ich Rede, wenn ich sage, ich kann nicht erreichen eine schlüssige Antwort. Es gibt eine Menge von widersprüchlichen Zeug gibt.

InformationsquelleAutor Shahbaz | 2012-04-16

Schreibe einen Kommentar