Her yerde dağınık bilgi parçaları gördüm, ancak bir son cevabı göremiyorum. Çekirdeğindeki zombi ipini nasıl temizlersin?Çekirdekdeki iş parçacıklarının uygun şekilde işlenmesi?
Sadece çekirdeğindeki iplikleri işlemek için kesin bir yol ve emin olmak için, bu soruyu daha geniş bir şekilde sormak istiyorum. Linux çekirdeğindeki bir iş parçacığını nasıl oluşturur, sonlandırır ve temizlersiniz?
Ne var bugüne kadar şudur:
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? */
ben temizleme solüsyonu bulduk yakın şey release_task, ama bu konuda konuşmak yerde bulamadık. İş parçacığı işlevleri kthread_create
, kthread_run
vb olduğundan beri hayal ettim, bir kthread_join
veya kthread_wait
olmalıdır, ancak yoktu. do_wait
da olası görünüyordu, ancak struct task_struct *
almıyor. Ayrıca, do_exit
'un iyi bir fikir olup olmadığından veya gerekmediğinden emin değilim. Birisi bir kthread'in nasıl yaratılması, sonlandırılması ve temizlenmesi gerektiğine dair en ufak bir taslak çizebilir mi?
Kthread_stop veya kthread_should_stop gibi bir şey olduğunu hatırlıyorum. –
@MartinJames, anladığım kadarıyla, ("do_exit" kullanarak) kendinizden çıkın ya da birileri ('cleanup_module')' kthread_stop' çağırsıncaya kadar '' kthread_should_stop'' komutunu verin. "Kthread_stop" un da ipliği temizleyip temizlemediğini söyleyen bir yer bulamadım. Beni şaşırtan şey şudur: Eğer insanlar (internette) 'do_exit' ya da her neyse kullanma önerisinde bulunurlarsa, 'do_exit' sonrası iş parçacığını temizlemenin bir yolu olmamalı mıdır? – Shahbaz
Bu arada, [bu] (http://lwn.net/Articles/65178/) söylediğim şey hakkında konuştuğum şey, kesin bir cevaba ulaşamıyorum. Orada çok fazla çatışan şey var. – Shahbaz