Linux內核線程


<背景>

內核線程類似於用戶進程,通常用於並並發處理性質的任務,並且可以搶占調度。不同於用戶進程,內核線程位於內核空間,並且可以訪問內核函數和內核數據。
 
<創建內核線程>
a:ret = kernel_thread(mythread,null,CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD)
參數注釋:
        CLONE_FILES:大開的文件共享
        CLONE_SIGHAND:信號處理程序共享
注:由於內核線程通常對設備驅動程序起到輔助作用,往往在設備初始化的時候被創建。在線程開始的時候會調用函數daemonize(),該函數會執行初始化的任務,之后將父進程改為kthreadd(每一個Linux進程都會有一個父進程,在子進程沒有全部退出的情況下殺死父進程,會導致子進程成為僵屍進程,繼續消耗計算機資源),將父進程改為ktheadd可以避免這種情況。
        daemonize()在默認情況下會阻止所有信號,所以如果想象處理信號,就應該調用函數allow_signal()來使能它。如果內核中沒有信號可以調用函數signal_pending()來檢測信號的存在並采取相應的行動。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM