Linux内核线程

来源:互联网 发布:c语言1到100以内的质数 编辑:程序博客网 时间:2024/05/17 03:44

    内核经常需要在后台执行一些操作,这种任务可以通过内核线程(kernel thread)完成——独立运行在内核空间的标准进程。

1.内核线程和普通进程的区别在于内核线程没有独立的地址空间。

2.内核线程只在内核空间运行,从来不切换到用户空间去。

3.内核线程和普通进程一样,可以被调度,也可以被抢占。

4.内核线程只能由其他内存线程创建。内核是通过从kthreadd内核进程中衍生出所有新的内核线程来自动处理这一点的。

1创建内核线程

头文件

#include <linux/kthread.h>

函数

struct task_struct *kthread_create(int (*threadfn)(void *data),

void *data,

const char namefmt[],

…);

参数

threadfn:线程运行函数

data:运行函数threadfn的参数

namefmt:线程名称

功能

创建处于不可运行状态的内核线程

说明

调用wake_up_process()唤醒内核线程开始运行

若想创建一个内核线程,并让它运行起来,可通过调用kthread_run()

#definekthread_run(threadfn, data, namefmt, ...)             \

({                                    \

   struct task_struct *__k                       \

       = kthread_create(threadfn, data, namefmt, ## __VA_ARGS__); \

   if (!IS_ERR(__k))                         \

       wake_up_process(__k);                     \

   __k;                                  \

})

2停止内核线程

1)在内核运行函数中调用do_exit()退出

2)调用kthread_stop()函数

int kthread_stop(struct task_struct *k);//参数kkthread_create的返回值

 


0 0
原创粉丝点击