linux内核线程示例代码
时间: 2024-12-05 08:11:29 浏览: 10
Linux 内核线程,也称为轻量级进程(Task),通常用于处理系统服务、中断处理等任务。下面是一个简单的示例代码片段,展示了如何创建和管理一个内核线程:
```c
#include <linux/kernel.h>
#include <linux/sched.h>
asmlinkage int my_kthread_entry(void *data) {
printk(KERN_INFO "Kernel thread started.\n");
// 这里添加你的线程主体代码...
while (true) {
schedule();
// 使用schedule()让出CPU给其他任务
}
return 0;
}
void create_kernel_thread(const char *name, unsigned long stack_size,
void (*fn)(void *)) {
struct task_struct *task = kthread_create(fn, NULL, name);
if (IS_ERR(task)) {
printk(KERN_ERR "Failed to create kernel thread: %ld\n", PTR_ERR(task));
return;
}
// 设置堆栈大小和其他属性
task->stack = kmalloc(stack_size, GFP_KERNEL);
if (!task->stack) {
kthread_stop(task);
printk(KERN_ERR "Failed to allocate stack for kernel thread.\n");
return;
}
set_name(task, name);
wake_up_process(task); // 启动新创建的任务
printk(KERN_INFO "Kernel thread created with PID %d.\n", task_pid(task));
}
// 调用函数创建一个名为"my_thread"的内核线程,堆栈大小为1MB
int main(void) {
create_kernel_thread("my_thread", 1 << 20, my_kthread_entry);
return 0;
}
```
在这个例子中,`my_kthread_entry`是内核线程的入口点,`create_kernel_thread`函数用于创建线程并启动它。注意这只是一个基础示例,实际应用中还需要考虑线程同步、错误处理等问题。
阅读全文