Ell*_*tus 24 linux process kernel thread linux-kernel
我在很多地方读到 Linux 为 Java VM 中的每个用户线程创建一个内核线程。(我看到术语“内核线程”以两种不同的方式使用:
我说的是后一种。)
内核线程是否与内核进程相同,因为 Linux 进程支持父子进程之间的共享内存空间,还是真的是一个不同的实体?
Tot*_*tor 34
文档可能非常混乱,所以这里是“真正的”Linux 模型:
getpid()从任何进程调用将返回其 TGID(=“主线程”PID),gettid()从任何进程调用将返回其 PID (!),clone(2)系统调用创建任何类型的进程,clone(2),ls /proc以及/proc/NUMBERTGID,/proc/TGID/task和/proc/TGID/task/NUMBERPID 一样,ls /proc,您仍然可以使用cd /proc/any_PID.结论:从内核的角度来看,只有进程存在,每个进程都有自己唯一的PID,所谓的线程只是一种不同类型的进程(至少与一个或多个共享相同的内存空间和信号处理程序)其他)。
注意: Linux 中“线程”概念的实现导致了词汇混乱,如果getpid() 对你撒谎并没有按照你的想法去做,那是因为它的行为遵循 POSIX 兼容性(线程应该共享一个公共 PID) .
Kyl*_*nes 19
线程是 Linux 下的进程。它们是用clone系统调用创建的,它返回一个进程 ID,可以通过kill系统调用发送信号,就像一个进程一样。线程进程在ps输出中可见。该clone调用传递它确定有多少父进程的环境与线程进程共享的标志。