如果我有以下内核线程函数:
int thread_fn() {
printk(KERN_INFO "In thread1");
return 0;
}
我还需要在这里使用kthread_stop()
功能吗?
线程函数中的return
是否会使内核线程停止并退出?
答案 0 :(得分:1)
如果您查看kthread()
implemented的方式,则在第209行调用threadfn(data)
并将退出代码存储在ret
;然后它调用do_exit(ret)
。
从threadfn
获得简单回报就足够了。
如果你查看kthread_stop的文档,就会说:
kthread_should_stop
以返回true; 这意味着只应从线程外部调用kthread_stop()
来停止线程。因为它等待线程完成,所以你不能在线程中调用它,否则你可能会死锁!
此外,文档说它只通知线程它应该退出,并且线程应该调用kthread_should_stop
来找出这个。所以一个长寿的threadfn
可能会这样做:
int thread_fn() {
printk(KERN_INFO "In thread1");
while (!kthread_should_stop()) {
get_some_work_to_do_or_block();
if (have_work_to_do())
do_work();
}
return 0;
}
但如果你的功能不长,则不需要调用kthread_should_stop
。