linux下进程和线程的区别和联系
进程用fork()或者vfork()生成(vfork是专门为了加载其他程序的子程序而优化的,随着fork()的优化,vfork已经被优化)
fork()生成的子进程与父进程共享代码区内存,对于其他内存
fork()之后常常伴随着 exec(), 这会用新程序替换进程的代码段,并重新初始化其 数据段、堆段和栈段。大部分现代 UNIX 实现(包括 Linux)采用两种技术来避免这种浪费。
1. 内核(Kernel)将每一进程的代码段标记为只读,从而使进程无法修改自身代码。这 样,父、子进程可共享同一代码段。系统调用 fork()在为子进程创建代码段时,其所 构建的一系列进程级页表项(page-table entries)均指向与父进程相同的物理内存页帧。
2.对于父进程数据段、堆段和栈段中的各页,内核采用写时复制(copy-on-write)技术 来处理。([Bach, 1986]和[Bovert & Cersati, 2005]描述了写时复制的实现。)最初,内核 做了一些设置,令这些段的页表项指向与父进程相同的物理内存页,并将这些页面自 身标记为只读。调用 fork()之后,内核会捕获所有父进程或子进程针对这些页面的修 改企图,并为将要修改的(about-to-be-modified)页面创建拷贝。系统将新的页面拷 贝分配给遭内核捕获的进程,还会对子进程的相应页表项做适当调整。从这一刻起,父、子进程可以分别修改各自的页拷贝,不再相互影响。图 24-3 展示了写时复制技术。
类似于 fork(),vfork()可以为调用进程创建一个新的子进程。然而,vfork()是为子进程立 即执行 exec()的程序而专门设计的。
vfork()因为如下两个特性而更具效率,这也是其与 fork()的区别所在。
1. 无需为子进程复制虚拟内存页或页表。相反,子进程共享父进程的内存,直至其成功 执行了 exec()或是调用_exit()退出。
2. 在子进程调用 exec()或_exit()之前,将暂停执行父进程。 这两点还另有深意:由于子进程使用父进程的内存,因此子进程对数据段、堆或栈的任 何改变将在父进程恢复执行时为其所见。此外,如果子进程在 vfork()与后续的 exec()或_exit() 之间执行了函数返回,这同样会影响到父进程。
vfork()的语义在于执行该调用后,系统将保证子进程先于父进程获得调度以使用 CPU。
线程:
类似于 fork()和 vfork(),Linux 特有的系统调用 clone()也能创建一个新进程。与前两者不 同的是,后者在进程创建期间对步骤的控制更为精准。clone()主要用于线程库的实现。由于 clone()有损于程序的可移植性,故而应避免在应用程序中直接使用。
大体上说来,fork()相当于仅设置 flags 为 SIGCHLD 的 clone()调用,而 vfork()则对应于设 置如下 flags 的 clone():
CLONE_VM | CLONE_VFORK | SIGCHLD
linux下进程和线程的区别和联系的更多相关文章
- Linux下进程与线程的区别及查询方法
在平时工作中,经常会听到应用程序的进程和线程的概念,那么它们两个之间究竟有什么关系或不同呢?一.深入理解进程和线程的区别 1)两者概念 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进 ...
- [转] linux 下 进程和线程的区别
1.进程与线程 进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程的一个执行流,是C ...
- [进程管理]linux 下 进程和线程的区别(baidu 面试)
进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程的一个执行流,是CPU调度和分派的 ...
- linux 下 进程和线程的区别
1.进程与线程 进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集.从内核的观点看,进程的目的就是担当分配系统资源(CPU时间.内存等)的基本单位. 线程是进程的一个执行流,是C ...
- Linux下进程与线程的区别
https://www.cnblogs.com/fah936861121/articles/8043187.html https://my.oschina.net/cnyinlinux/blog/36 ...
- linux查看进程的线程数
top -H -p $PID #查看对应进程的那个线程占用CPU过高 1.top -H 手册中说:-H : Threads toggle 加上这个选项启动top,top一行显示一个线程.否则,它一行 ...
- Linux进程与线程的区别
进程与线程的区别,早已经成为了经典问题.自线程概念诞生起,关于这个问题的讨论就没有停止过.无论是初级程序员,还是资深专家,都应该考虑过这个问题,只是层次角度不同罢了.一般程序员而言,搞清楚二者的概念, ...
- Linux中进程与线程的概念以及区别
linux进程与线程的区别,早已成为IT界经常讨论但热度不减的话题.无论你是初级程序员,还是资深专家,都应该考虑过这个问题,只是层次角度不同罢了.对于一般的程序员,搞清楚二者的概念并在工作中学会运用是 ...
- 【Linux】程序、进程和线程的区别
程序.进程和线程的区别 程序是一组指令及参数的集合,指令按照既定的逻辑控制计算机运行.进程则是运行着的程序,是操作系统执行的基本单位.线程则是为了节省资源而可以在同一个进程中共享资源的一个执行单位. ...
- linux下进程的最大线程数、进程最大数、进程打开的文件数
linux下进程的最大线程数.进程最大数.进程打开的文件数 ===========最大线程数============== linux 系统中单个进程的最大线程数有其最大的限制 PTHREAD_TH ...
随机推荐
- C#小知识之中英文转换、去空格
一.中英文转换 1.安装NPinYin 2.编写代码 string str = "这里是测试的中文字符串"; string str1 = Pinyin.GetChineseText ...
- .net core + vue + elementui 删除指定日期段、指定路径下的所有文件
1.呈现效果 2.后端 1)服务层 /// <summary> /// 删除指定修改日期段及指定路径下的所有文件 /// </summary> /// <param na ...
- 题解 [SCOI2008]斜堆
好题.一道很有趣的性质提. 因为自己搞错结论然后改了 1h(悲 闲话少说,切入正题-- 这是不断插入的,所以根据套路我们会考虑最后一个插入的节点的性质.显然满足: 它是从根不停往左走的路上. 它没有右 ...
- Linux提权之:利用capabilities提权
Linux提权之:利用capabilities提权 目录 Linux提权之:利用capabilities提权 1 背景 2 Capabilities机制 3 线程与文件的capabilities 3. ...
- 三天吃透Redis面试八股文
本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...
- Dev Express 框架自定义登录添加短信验证功能
需求:登录界面改成这样 记录一下过程,以便下次操作类似的步骤有遗忘,也与大伙儿分享下,如有不当之处请指出,感谢. 参考官网文档:https://docs.devexpress.com/eXpressA ...
- No.2.1
字体图标( 目的:使用字体图标技巧实现网页中简洁的图标效果) 字体图标展示的是图标,本质是字体,处理简单的.颜色单一的图片 优点:灵活性:灵活的修改样式,例如:尺寸,颜色等 轻量级:体积小,渲染快,降 ...
- mybatis日志打印到控制台
mybatis: configuration:# 日志输出到控制台 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
- MDK GCC调试
openocd调试 https://blog.csdn.net/chunyexixiaoyu/article/details/120448515
- 在linux 下如何快速创建环境
首先先在你的主目录下创建一个文件 touch venv python创建环境 python3 -m venv venv 创建虚拟环境 (提示:当你有错找不到的时候可以重新创建一个环境) source ...