¿Manera adecuada de manejar los hilos en el núcleo?
He visto fragmentos de información dispersa por todas partes, pero parece que no puedo llegar a una respuesta final. ¿Cómo se limpia un hilo de zombie en el núcleo?
Solo para asegurarnos, y para producir una forma correcta final de manejar los hilos en el kernel, me gustaría hacer esta pregunta de manera más amplia.¿Cómo crear, terminar y limpiar un hilo en el kernel de Linux?
Lo que tengo hasta ahora es esto:
<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>
Lo más cercano que he encontrado a la solución de limpieza esrelease_task, pero no encontré ningún lado hablando de eso. Me lo imaginaba ya que las funciones del hilo sonkthread_create
, kthread_run
etc, debe haber unkthread_join
okthread_wait
, pero no hubodo_wait
También parecía probable, pero no toma unstruct task_struct *
.
Además, no estoy seguro sido_exit
Es una buena idea, o si es necesario. ¿Alguien puede, por favor, hacer un bosquejo mínimo de cómo se debe crear, terminar y limpiar un kthread?