kernel_thread()()(),daemonize



------------------------------------------------------



国际thread_func(void *参数)



{



*



*设置线程的名字--线程名,thread_name,PS可以看到



如果你不使用daemonize设置内核线程的名字,和kernel_thread()



*用户状态程序通过系统调用使用,ps将为用户进程看到相同的名称。



*内核线程。



* /



daemonize(thread_name );



返回0;



}



{



pid_t PID;



创建一个内核线程



PID = kernel_thread(thread_func,null,clone_kernel);



如果(PID<0)



{



printk(kernel_thread errorn );



}



}



kthread_run()--这种创作更简洁



------------------------------------------------------



国际thread_func(void *参数)



{



返回0;



}



{



结构task_struct * my_thread = null;



my_thread = kthread_run(thread_func,null,thread_name );



如果(is_err(my_thread))



{



RC = ptr_err(my_thread);



printk(错误%d创建thread_name螺纹



}



}



kernel_thread()类似于叉()在应用编程



------------------------------------------------------



静态变量jffs2_garbage_collect_thread(void * _c)



{



…



daemonize(jffs2_gcd_mtd %d



…



完成(C→gc_thread_start);



…



}



国际jffs2_start_garbage_collect_thread(struct jffs2_sb_info×C)



{



pid_t PID;



int = 0;



bug_on(C→gc_task);



init_completion(C→gc_thread_start);



init_completion(C→gc_thread_exit);



PID = kernel_thread(jffs2_garbage_collect_thread,C,clone_fs | clone_files);



如果(PID < 0)判断错误条件



printk(kern_warning叉失败JFFS2垃圾收集线程:% DN



完成(C→gc_thread_exit);



PID;



}其他0,父进程中的肯定



printk(kern_debugJFFS2:垃圾收集线程的PID为DN



wait_for_completion(C→gc_thread_start); / /父进程等待子进程结束



}



返回页首;



}