【发布时间】:2016-01-11 12:04:04
【问题描述】:
当我创建一个内核线程(kthread_run)时,它变成了一个新进程。(我可以使用top 命令看到它)。如何创建轻量级内核线程(就像我们在用户空间中拥有的那样)?
如果我没记错的话,kthread_create 最终会调用 fork(),它会调用具有适当配置的 clone() 来创建一个新的进程/lw 进程。是否可以使用 clone() 或类似的 api 创建 lw 内核线程?提前非常感谢。
【问题讨论】:
-
@Neijwiert:如果我没记错的话,内核线程和 posix 线程是两个完全不同的概念,所以我不确定这是否对 Karthik 有帮助
-
@MikeMB 我也不确定 OP 想要什么,因为他/她在问“就像我们在用户空间中拥有的一样”
-
我正在编写 16 个内核模块,每个模块需要创建两个线程。我不希望内核将这些线程列为进程。就像没有为用户线程创建新进程一样,我也想为内核线程实现类似的行为。如果我不能理解,请回来
-
Like new processes are not created for user threads- 如果用户线程假设pthreads,那么你就错了:在Linux中pthreads是用clone创建的,即每个pthread实际上是基于流程(或任务,如下面的 Matteo Italia 所述)。当然,clone的参数对于fork()和pthread_create()是不同的。如果您的意思是user threads别的意思,那么请澄清一下。 -
你在我所知道的任何最近的 Linux 机器上“在用户空间”中的线程与你在内核空间中描述的完全一样——它们创建了一个共享大部分资源的新“任务”(地址空间,文件表,...)与父。 IOW,在 Linux 上,进程和线程由内核以相同的方式处理 - 它们是具有一些相关资源的“任务”(可调度实体),这些资源可能(线程)或可能不(进程)与其他任务共享。跨度>
标签: c linux multithreading linux-kernel kernel-module