He visto fragmentos de información dispersa, pero parece que no puedo obtener una respuesta final. ¿Cómo se limpia un hilo zombie en Kernel?Manera correcta de manejar hilos en kernel?
Solo para asegurarme, y producir una forma correcta final de manejar los hilos en kernel, me gustaría hacer esta pregunta más ampliamente. ¿Cómo se crea, finaliza y limpia un hilo en el kernel de Linux?
Lo que tengo hasta ahora es la siguiente:
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? */
Lo más parecido que he encontrado para la solución de limpieza es release_task, pero que no encontrar en cualquier lugar de hablar de ello. Imaginaba que dado que las funciones de subprocesos son kthread_create
, kthread_run
etc., debería haber un kthread_join
o kthread_wait
, pero no lo había. do_wait
también parecía probable, pero no toma un struct task_struct *
.
Además, no estoy seguro de si do_exit
es una buena idea, o si es necesario tampoco. ¿Puede alguien dar el boceto mínimo de cómo debe crearse, terminarse y limpiarse una kthread?
Me parece recordar que hay un kthread_stop, o kthread_should_stop, algo así. –
@MartinJames, de la manera en que lo entendí, o salgas de ti mismo (usando 'do_exit') o sondear' kthread_should_stop' hasta que alguien ('cleanup_module') llame a' kthread_stop'. No encontré en ninguna parte diciendo si 'kthread_stop' también limpia el hilo o no. Lo que me hace pensar es que, si las personas (en Internet) sugieren usar 'do_exit' o lo que sea, ¿no debería haber una forma de limpiar el hilo después de' do_exit'? – Shahbaz
Por cierto, [esto] (http://lwn.net/Articles/65178/) es de lo que hablo cuando digo que no puedo llegar a una respuesta definitiva. Hay muchas cosas conflictivas por ahí. – Shahbaz