私はあちこちに散らばった情報を見てきましたが、最終的な答えを1つ得ることができないようです。カーネルでゾンビスレッドをどのようにクリーンアップしますか?
念のため、カーネルでスレッドを処理する最終的な正しい方法を作成するために、この質問をもっと広く質問したいと思います。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を作成、終了、およびクリーンアップする方法の最小限のスケッチを思い付くことができますか?