函數說明:
kthread_create:創建線程。
struct task_struct *kthread_create(int (*threadfn)(void *data),void *data,const char *namefmt, ...);
線程創建後,不會馬上運行,而是需要將kthread_create() 返回的task_struct指針傳給wake_up_process(),然後通過此函數運行線程。
kthread_run :創建並啓動線程的函數:
struct task_struct *kthread_run(int (*threadfn)(void *data),void *data,const char *namefmt, ...);
kthread_stop:通過發送信號給線程,使之退出。
int kthread_stop(struct task_struct *thread);
線程一旦啓動起來後,會一直運行,除非該線程主動調用do_exit函數,或者其他的進程調用kthread_stop函數,結束線程的運行。
但如果線程函數正在處理一個非常重要的任務,它不會被中斷的。當然如果線程函數永遠不返回並且不檢查信號,它將永遠都不會停止。
代碼:
這個內核線程的作用就是每隔一秒打印一個“hello world”。
值得一提的是kthread_should_stop函數,我們需要在開啓的線程中嵌入該函數,否則kthread_stop是不起作用的。