thread,Pthread,lwp,kthread的基本概念

jackxiang 2010-2-11 10:51 | |
thread:略.
PthreadOSIX定义的纯用户线程,对于内河而言是不知道他存在的
lwp:内河支持的线程,LINUX中的THREAD就是于此相当.
kthread:没有用户文镜.纯粹的在内河的驱动程序中执行.注意要与LINUX中的内存守护线程象区别.
问题:
我用kthread_create方法创建了一个内核线程,在线程执行函数的末尾调用的do_exit(),这样虽然释放了大部分资源,但进程描述符应该还没有释放。
请问有没有合适的方法在我的内核模块程序里彻底删除这个线程?

请帮忙详细解释好吗
例如我这样创建一个kthread


struct task_struct *tsk = NULL;

int run(void *data)
{
       init_completion( (struct completion *) data )
       complete( (struct completion *) data );
       do_exit(0);
}

void entrance()
{
     struct completion cplt;
     tsk = kthread_create(run, &cplt, "test_thd");
     if (tsk == NULL) {
           return;
     }

      wait_for_completion(&cplt);

      // 如果我要在这个位置彻底删除上面创建的线程应该怎么办,应该添加哪些代码

    return;
}
请帮忙解释好吗? 谢谢!


由父进程在信号处理中执行最后的清除
do_signal->sys_wait4->release_task
而这个信号是由exit_notify->do_notify_parent发出的

kill_proc会导致内核crash掉,如果注释掉的话,kernel thread会一直处于zombie状态!
我也遇到在linux上通过php的dio_open函数调用串口出现:

[root@localhost dio]# ps aux|grep read
root         7  0.0  0.0      0     0 ?        S<   05:22   0:00 [kthread]

不知道如何解决!

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/2708/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]