thread:略.
PthreadOSIX定义的纯用户线程,对于内河而言是不知道他存在的
lwp:内河支持的线程,LINUX中的THREAD就是于此相当.
kthread:没有用户文镜.纯粹的在内河的驱动程序中执行.注意要与LINUX中的内存守护线程象区别.
问题:
我用kthread_create方法创建了一个内核线程,在线程执行函数的末尾调用的do_exit(),这样虽然释放了大部分资源,但进程描述符应该还没有释放。
请问有没有合适的方法在我的内核模块程序里彻底删除这个线程?
请帮忙详细解释好吗
例如我这样创建一个kthread
由父进程在信号处理中执行最后的清除
do_signal->sys_wait4->release_task
而这个信号是由exit_notify->do_notify_parent发出的
kill_proc会导致内核crash掉,如果注释掉的话,kernel thread会一直处于zombie状态!
我也遇到在linux上通过php的dio_open函数调用串口出现:
不知道如何解决!
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;
}
请帮忙解释好吗? 谢谢!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]
root 7 0.0 0.0 0 0 ? S< 05:22 0:00 [kthread]
不知道如何解决!
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/2708/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
评论列表