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 ...
随机推荐
- 一文搞懂秒杀系统,欢迎参与开源,提交PR,提高竞争力。早日上岸,升职加薪。
前言 秒杀和高并发是面试的高频考点,也是我们做电商项目必知必会的场景.欢迎大家参与我们的开源项目,提交PR,提高竞争力.早日上岸,升职加薪. 知识点详解 秒杀系统架构图 秒杀流程图 秒杀系统设计 这篇 ...
- ps抠图小技巧
1.背景橡皮擦工具 适合分离单一背景. 中括号键可以调整大小. 2.调整边缘抠图(也叫选择并遮住) 适合扣毛发丝. 套索工具框选出大概: 点击选择并遮住后出来一个面板: 视图选择叠加,输出设置勾上净化 ...
- 基于电商直播SDK快速实现一个淘宝直播APP【内附源码】
现在各大互联网APP都标配电商直播带货了,没有直播带货开发经验都感觉自己跟不上技术的进步.今天快速基于Java实现一个安卓端电商直播APP,深入理解整个电商直播开发流程.我们最终实现效果如下: 按照惯 ...
- C语言初学习
首先我们先看一下什么是编译型语言和解释型语言: 解释:借助一个程序,那个程序能试图理解你的程序,然后按照你的要求执行 编译:借助一个程序,就像一个翻译,把你的程序翻译成计算机真正能懂得语言--机器语言 ...
- 代码随想录算法训练营day02 | leetcode 977/209/59
leetcode 977 分析1.0: 要求对平方后的int排序,而给定数组中元素可正可负,一开始有思维误区,觉得最小值一定在0左右徘徊,但数据可能并不包含0:遂继续思考,发现元素分布有三种情 ...
- 基于Ubuntu搭建OpenGL开发环境
1. 引言 笔者这里基于Ubuntu 20.04.3 LTS系统,搭建OpenGL开发环境,主要使用的库有GLFW和GLAD GLFW是一个专门针对OpenGL的C语言库,它提供了一些渲染物体所需的最 ...
- 分析总结一下所有有关打印题目的套路和思路:pat乙级:1109 擅长C, 1008元素循环右移,1050 螺旋矩阵,1027 打印沙漏等等
分析: 首先你要明白第一件事:所有要打印东西的题目打印都是从第一行到最后一行,从第一列到最后一列,你是没办法跳着打印的.可以看看其他几个打印题目1008元素循环右移,1050 螺旋矩阵1027 打印沙 ...
- 一文搞懂│http 和 https 的通信过程及区别
目录 两者的区别 HTTP的通信过程 HTTPS的通信过程 两者的区别 端口: http 端口号是80,https 端口号是443 传输协议: http 是超文本传输协议,属于明文传输:https 是 ...
- WPF使用WindowChrome自定义标题栏
第一步:基本实现 添加Window的Style定义,并设置WindowChrome.WindowChrome属性: 设置WindowChrome标题栏: CaptionHeight--主要用于拖动有效 ...
- NSIS 自定义界面,下载并安装Net.Framework4.8
以 ScreenToGif 这款软件为例,详细讲解如何在安装的过程中检测并下载net包进行安装. 前言 1.ScreenToGif 是一款开源的截屏软件,依赖于Net.Framework环境 2.本文 ...