位置: 编程技术 - 正文

Linux系统进程深入理解(linux进程详解)

编辑:rootadmin

推荐整理分享Linux系统进程深入理解(linux进程详解),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:linux 进程,linux 进程数,linux操作系统进程,linux操作系统进程,linux系统中进程的6种状态,linux进程状态详解,linux系统进程状态,linux系统中进程的6种状态,内容如对您有帮助,希望把文章链接给更多的朋友!

1. 什么是进程

进程是处于执行期的程序以及它所包含的所有资源的总称,包括虚拟处理器,虚拟空间,寄存器,堆栈,全局数据段等。

在Linux中,每个进程在创建时都会被分配一个数据结构,称为进程控制块(Process Control Block,简称PCB)。PCB中包含了很多重要的信息,供系统调度和进程本身执行使用。所有进程的PCB都存放在内核空间中。PCB中最重要的信息就是进程PID,内核通过这个PID来唯一标识一个进程。PID可以循环使用,最大值是。init进程的pid为1,其他进程都是init进程的后代。

除了进程控制块(PCB)以外,每个进程都有独立的内核堆栈(8k),一个进程描述符结构,这些数据都作为进程的控制信息储存在内核空间中;而进程的用户空间主要存储代码和数据。

2.进程的创建

进程是通过调用::fork(),::vfork()和::clone()系统调用创建新进程。在内核中,它们都是调用do_fork实现的。传统的fork函数直接把父进程的所有资源复制给子进程。而Linux的::fork()使用写时拷贝页实现,也就是说,父进程和子进程共享同一个资源拷贝,只有当数据发生改变时,数据才会发生复制。通常的情况,子进程创建后会立即调用exec(),这样就避免复制父进程的全部资源。

三者的区别如下:

::fork():父进程的所有数据结构都会复制一份给子进程(写时拷贝页)。

::vfork():只复制task_struct和内核堆栈,所以生成的只是父进程的一个线程(无独立的用户空间)。

::clone():功能强大,带了许多参数。::clone()可以让你有选择性的继承父进程的资源,既可以选择像::vfork()一样和父进程共享一个虚拟空间,从而使创造的是线程,你也可以不和父进程共享,你甚至可以选择创造出来的进程和父进程不再是父子关系,而是兄弟关系。

Linux系统进程深入理解(linux进程详解)

3. 进程的撤销

进程通过调用exit()退出执行,这个函数会终结进程并释放所有的资源。父进程可以通过wait4()查询子进程是否终结。进程退出执行后处于僵死状态,直到它的父进程调用wait()或者waitpid()为止。父进程退出时,内核会指定线程组的其他进程或者init进程作为其子进程的新父进程。当进程接收到一个不能处理或忽视的信号时,或当在内核态产生一个不可恢复的CPU异常而内核此时正代表该进程在运行,内核可以强迫进程终止。

4. 进程管理

内核把进程信息存放在叫做任务队列(task list)的双向循环链表中(内核空间)。链表中的每一项都是类型为task_struct,称为进程描述符结构(process descriptor),包含了一个具体进程的所有信息,包括打开的文件,进程的地址空间,挂起的信号,进程的状态等。

Linux通过slab分配器分配task_struct,这样能达到对象复用和缓存着色(通过预先分配和重复使用task_struct,可以避免动态分配和释放所带来的资源消耗)。

内核把所有处于TASK_RUNNING状态的进程组织成一个可运行双向循环队列。调度函数通过扫描整个可运行队列,取得最值得执行的进程投入执行。避免扫描所有进程,提高调度效率。

5. 进程的内核堆栈

Linux为每个进程分配一个8KB大小的内存区域,用于存放该进程两个不同的数据结构:thread_info和进程的内核堆栈。

进程处于内核态时使用不同于用户态堆栈,内核控制路径所用的堆栈很少,因此对栈和描述符来说,8KB足够了。

linux 判断当前用户是否是root linux中,如何判断当前用户是否是root呢?判断当前用户是否是root复制代码代码如下:#----------------------------rootusercheck---------------------startif[`id-u`-ne0];thenech

rsync+inotify实现多台web数据动态同步操作步骤 *背景:由于无存储共享设备,web集群中的代码均存放在本地,最终导致web节点之间的数据无法一致。*解决办法:采用rsync+inotify,实现多台web数据动态

Redhat linux本地yum源的配置教程 相信对RedHatLinux或CentOS比较熟悉的人,应该是比较了解yum源的,它比普通的rpm包安装,要方便的多,为何呢?因为它能顺利的解决rpm包之间的依赖关系。

标签: linux进程详解

本文链接地址:https://www.jiuchutong.com/biancheng/362063.html 转载请保留说明!

上一篇:Linux构造磁盘空间满的测试环境解决方案(linux磁盘结构)

下一篇:linux 判断当前用户是否是root(linux 判断语句)

  • 税收筹划分为哪几类
  • 材料按实际成本计价时发出成本的计算方法有
  • 固定收益凭证是固定的吗
  • 微信支付属于现金嘛
  • 个税申报截止日期2023年8月
  • 民办非企业单位设立分机构
  • 应收账款确认无法收回分录
  • 开业税务登记的基本流程
  • 一般纳税人取得普票会计分录
  • 货物发出未开票不确认收入
  • 房产税逾期未申报罚款多少
  • 建筑施工企业质量体系环境包括
  • 科研项目间接费用会计分录
  • 当月逾期押金收违约金吗
  • 折扣折让的销售方式有哪些
  • 支付的管理费用可以抵税吗
  • 员工借款可以直接转账吗
  • 赠品折扣计算法
  • 划拨土地使用权出租
  • 上月作废的发票忘了作废,怎么做账
  • 大宗物资吧
  • 小型微利企业的条件
  • 公司研发产品
  • 公司办事处人员配置标准最新
  • 印花税可以根据企业流水申报吗
  • 跨年度残保金退税怎么算
  • 如何设置老板键
  • 微软正式宣布收购动视暴雪
  • 公司章程签署
  • 违约金条款的特点
  • 政府补助计量的基础是
  • 清除cmos有什么后果
  • 苹果手机下载爱思极速版有什么影响
  • tdxcef.exe进程
  • 企业购入固定资产在每期末应使用公允价值法进行计量
  • 最早的滑盖手机,摄像头可以自动旋转
  • 存货报废的税务处理及会计处理
  • 企业所得税征收点
  • PHP基于SimpleXML生成和解析xml的方法示例
  • php代码生成
  • 会计政策变更对财务分析的影响
  • 外贸企业出口退税流程(详细步骤)
  • php生成csv文件
  • 本月损益类未结转为零的一级科目
  • 权重下降是什么原因
  • 一个用于表示特定的web页的标识符url称为
  • cmd 过滤命令
  • 客户的赔偿金会计分录
  • 金税盘发票作废失败09D13D
  • 帝国cms获取当日发布的url链接
  • 不抵扣的进项税额用不用转出
  • 应收账款是指什么
  • 汇算清缴是怎么弄的
  • 月末在产品生产成本会计分录
  • 进项税额中运输费怎么算
  • 如何取消已经生产的产品
  • centos rpm安装方法
  • linux lftp命令
  • wp_official_1.1.3.apk软件下载
  • ghost安装器怎么用
  • 老毛桃u盘启动盘制作工具怎么安装win10系统 老毛桃u盘安装win10系统图文教程
  • ubuntu静态ip地址
  • linux系统检测
  • win7和linux双系统
  • centos7如何设置固定ip
  • office解压后如何安装
  • win8的ie浏览器在哪里
  • Win10 Mobile/PC Build 10586.550曝光:主要修复bug和优化性能
  • Linux桌面环境安装
  • w10怎么创建此电脑
  • android RecycleView 面试
  • bootstrap要学吗
  • jquery 选中
  • 字符串中指定字符变换
  • js获取内容高度
  • clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
  • android中启动service的方法有
  • javascript数据结构与算法第三版
  • 请问农村自建房彩钢瓦下面修房吊什么顶好
  • 树叶加树叶等于几
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设