【Linux】Linux下进程Vs线程

进程和线程的创建

进程创建

用户态 fork() ---->内核态fork()------>kernel_clone() ---->copy_process()

线程创建

用户态pthread_create()---->do_clone()----->内核态clone()---->kernel_clone()---->copy_process()

进程Vs线程

和创建进程时使用的fork系统调用相比,创建线程的clone系统调用几乎和fork差不多,也一样使用的是内核的kernel_clone(),最后走到copy_process完成,但是区别是调用kernel_clone时传入的clone_flags里的标记不同

进程flag Vs 线程flag

进程flag

仅有一个SIGCHLD

线程flag

CLONE_VM/CLONE_FS/CLONE_FILES/CLONE_SIGNAL/CLONE_SETTLS/CLONE_PARENT_SETTID/CLONE_CHILD_CLEARTID/CLONE_SYSVSEM

创建线程时主要的三个flag

CLONE_VM:新task和父进程共享地址空间

CLONE_FS:新task和父进程共享文件系统信息

CLONE_FILES:新task和父进程共享文件描述符表

对于线程来说,因为创建的时候使用了这些flag,所以内核在创建线程时不在单独申请地址空间、目录信息、打开文件列表,新的线程和创建它的进程共享

对于进程来说,地址空间、挂载点、打开文件列表都是需要独立拥有的,都需要去申请内存并初始化

Linux内核并没有对线程做特殊处理,还是使用task_struct来管理线程。从内核角度看,线程本质上和进程没有大的区别,只不过和普通进程相比,线程轻量一点,总统来说,进程和线程的相同的大于不同点

如何判断task是进程还是线程?

进程和线程最主要的区别是进程有独立的虚拟地址空间,而线程都是和创建它的进程共享的

相关推荐
李白你好1 小时前
Windows 离线 Linux 提权辅助查询工具
linux
Lust Dusk2 小时前
记一次Linux应急响应题目解析
linux·运维·服务器·网络·安全·网络安全
ShineWinsu2 小时前
对于Linux:五种IO模型以及非阻塞IO的详细解析
linux·c++·面试·io·阻塞·非阻塞·fcntl
千千寰宇2 小时前
[Linux/Ollama] Termux : 一款运行在 Android 平台上的开源终端模拟器与 Linux 环境应用、支持在手机上基于Ollama部署LLM
linux
lingran__4 小时前
Linux 基础常用指令万字详解(上)|文件目录命令,结合底层原理剖析
linux·运维·服务器·后端·centos·linux基础指令
Dlrb12115 小时前
Linux驱动---sys文件系统自动添加设备节点、添加调试节点以及MISC设备驱动的解释
linux·imx6ull·misc·设备节点·sys文件系统
刘某的Cloud6 小时前
Galera Cluster mariadb 生产环境常见问题排查与运维指南
linux·运维·数据库·mariadb·集群高可用
70asunflower6 小时前
Linux 性能排查分析完全教程
linux·运维
dok127 小时前
Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》 (11)kmalloc 动态内存分配和struct file中的私有数据
linux·驱动开发·算法
DFT计算杂谈8 小时前
ZrBr单层掺杂诱导的自旋/反常霍尔响应切换
linux·开发语言·机器学习·php·量子计算