【Linux】对进程概念的理解

这篇具有很好参考价值的文章主要介绍了【Linux】对进程概念的理解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一丶进程概念

进程定义 

进程是一个具有一定独立功能的程序在一个数据集合上依次动态执行的过程。进程是一个正在执行的程序的实例,包括程序计数器、寄存器和程序变量的当前值。

进程特征

1.进程依赖于程序运行而存在,进程是动态的,程序是静态的。当一个程序被加载到内存当中并执行起来,整个执行的过程就叫做进程,所以进程是动态的,而程序是静态的。

2.进程是操作系统进行资源分配和调度的一个独立单位(CPU除外,线程是处理器任务调度和执行的基本单位)

3.每个进程拥有独立的地址空间,地址空间包括代码区、数据区和堆栈区,进程之间的地址空间是隔离的,互不影响。对于进程的虚拟地址空间,我会在后面详细介绍。

进程的意义

进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。


二丶进程与程序的区别

  1. 程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。我们自己所编写的代码和数据在没有运行起来的时候就叫做程序,仅仅只是一个代码和数据的集合,而当我们真正运行程序的时候,程序就会加载到内存,由cpu执行我们的代码和指令,这就是进程。
  2. 程序可以作为一种软件资料长期存在,而进程是有一定生命期的,程序是永久的,而进程是暂时的。程序作为代码和数据的集合可以长期存在我们的计算机,而进程作为程序的执行过程,当这个过程走到结尾,进程的生命周期也结束了。
  3. 进程是操作系统将程序的代码和数据加载到内存当中,并且由操作系统创建进程控制块(PCB)来对该进程进行管理和控制。即进程实质是程序加载到内存的代码和数据以及对应PCB的集合。

三丶进程状态

 一般而言,每一个进程至少应该处于以下三种状态之一:

         1、就绪状态:这是指进程已处于准备好运行的状态,即进程已分配到除CPU以外的所有的必要资源后,只要获得CPU,便可立即执行。如果系统中有许多处于就绪状态的进程,通常将它们按一定的策略(如优先级策略)排成一个队列,称该队列为就绪队列。

        2、运行状态:这是指进程已获得CPU,其程序正在执行的状态。对任何一个时刻而言,在单处理机系统中,只有一个进程处于执行状态,而在多个处理机系统中,则有多个进程处于执行状态。

        3、阻塞状态这是指正在执行的进程由于发生某事件(如I/O请求、申请缓冲区失败等)暂时无法继续执行时的状态,亦即进程的执行受到阻塞。此时引起进程调度,OS把处理机分配给另一个就绪进程,而让受阻进程处于暂停状态,一般把这种暂停状态称为阻塞状态,有时也称为等待状态或封锁状态。通常系统将处于阻塞状态的进程也排成一个队列,称该队列为阻塞队列。实际上,在较大的系统中,为了减少队列操作的开销,提高系统效率,根据阻塞原因不同,会设置多个阻塞队列。

这里详细解释一下进程的阻塞状态:

进程阻塞:简而言之也可以说是进程因为等待某种资源就绪,而导致进程不推进的一种状态。例如,一个c语言程序调用了scanf,此时运行该程序,该程序的代码和数据被加载到内存,并产生了该程序的pcb/task_struct供操作系统进行管理,因为scanf函数要读取用户键盘的输入,此时如果用户不输入任何数据,那么该进程就会处于阻塞状态,该进程对应的pcb/task_struct,就要被放到等待相应资源的外设中的队列中去(这里的pcb就应该被放到键盘对应的队列中去等待资源),直到需要的资源就绪,才会重新被操作系统调度,cpu才会进行计算。

有别于进程阻塞,有一种特殊状态叫进程阻塞挂起:当内存不足时,操作系统会将一些处于阻塞状态的进程加载到内存中的代码和数据保存到磁盘上,释放掉代码和数据,从而为正在进行的进程腾出空间。

在linux操作系统中,我们通过命令行指令,可以查到每个进程的属性及具体状态。

R运行状态

进程处于正在执行的状态。

注意:一个状态显示为R状态的进程,不一定正在被CPU调度执行,所有处于CPU执行队列里面的进程的状态都是显示为R状态,表示该进程正在被CPU调度执行,或者正在等待被CPU调度执行。

S休眠状态

可以中断休眠,本质是一种阻塞状态。

下面是一个实验代码,方便我们更好理解进程的运行和阻塞状态,左边是进程的属性及状态等信息,右边是我们所写的程序:

【Linux】对进程概念的理解,linux,运维,服务器

 如果我们没有注释掉执行printf函数这行代码的话,该进程会访问外设,等待显示器的资源就绪(外设的处理速度远小于CPU的处理速度),此时进程会处于阻塞状态,也就是我们所查到的S+状态,而执行查询进程状态时,CPU所花费的时间远远小于等待外设就绪的时间,此时就会查出来进程是休眠状态,而一旦去掉printf函数,进程不再访问外设而在一直运行,那就能查出进程是R+状态,即该进程在CPU的运行队列当中。

而运行队列由操作系统维护,而操作系统也存在内存当中,即该运行队列也在内存中。

D磁盘睡眠状态

不可中断休眠,即使是操作系统也无法杀死这个进程。

当服务器压力过大时,OS会通过一定的手段,杀掉一些进程,来起到节省空间的作用!

如果是S状态时,可以被OS杀掉;

如果是D状态时,不能被OS杀掉,OS无法插手,只能等进程自动醒来;

T暂停状态

kill -17 +pid 暂停进程 显示T状态

kill -18 +pid 继续进程 但进程状态会变为S 即在后台运行的程序,不能被Ctrl+c终止,必须kill -9 +pid 来杀死该进程 调试过程中打断点,本质就是让进程暂停,状态是t,表示追踪时暂停

X死亡状态

一瞬间的状态,不好查到

Z僵尸状态

一个进程不会立即退出,而是保持僵尸状态,方便后续父进程(os)读取该子进程退出的退出结果。文章来源地址https://www.toymoban.com/news/detail-706117.html

到了这里,关于【Linux】对进程概念的理解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux运维】shell脚本检查服务器内存和CPU利用率

    在管理服务器时候写了一个 shell脚本,在服务上实现每天凌晨3点查系统的指定文件夹下的容量大小,如果超过10G就要删除3天前的内容,还要时刻查询内存和cpu利用率,如果超过80%就要提示用户出现过载 将以上代码保存为一个.sh文件,然后通过crontab在每天凌晨3点运行即可:

    2024年02月09日
    浏览(67)
  • Linux服务器中查看进程的四种方法

    1. 使用 ps aux 命令来查看,能以简单列表的形式显示出进程信息 ps aux 用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序. ps 命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进

    2024年02月02日
    浏览(42)
  • Linux网络编程:多进程 多线程_并发服务器

    文章目录: 一:wrap常用函数封装 wrap.h  wrap.c server.c封装实现 client.c封装实现 二:多进程process并发服务器 server.c服务器 实现思路 代码逻辑  client.c客户端 三:多线程thread并发服务器 server.c服务器 实现思路 代码逻辑  client.c客户端 ​​​​   read 函数的返回值 wrap.h  wrap

    2024年02月12日
    浏览(56)
  • Linux服务器常见运维性能测试(1)综合跑分unixbench、superbench

    最近需要测试一批服务器的相关硬件性能,以及在常规环境下的硬件运行稳定情况,需要持续拷机测试稳定性。所以找了一些测试用例。本次测试包括在服务器的高低温下性能记录及压力测试,高低电压下性能记录及压力测试,常规环境下CPU满载稳定运行的功率记录。 这个系

    2024年02月04日
    浏览(82)
  • Linux本地部署1Panel服务器运维管理面板并实现公网访问

    1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器,包括主机监控、文件管理、数据库管理、容器管理等 下面我们介绍在Linux 本地安装1Panel 并结合cpolar 内网穿透工具实现远程访问1Panel 管理界面 执行如下命令一键安装 1Panel: 安

    2024年02月04日
    浏览(98)
  • 蓝易云:Linux系统sshd命令 – openssh服务器守护进程

    sshd是Linux系统中的一个守护进程,它提供了远程登录服务和安全的文件传输功能。以下是sshd的详细教程。 1. 安装openssh-server 在Debian/Ubuntu上安装openssh-server命令如下: sudo apt-get update sudo apt-get install openssh-server 在CentOS/RHEL上安装openssh-server命令如下: sudo yum update sudo yum install

    2024年02月16日
    浏览(49)
  • 基于linux下的高并发服务器开发(第二章)- 2.7 进程退出、孤儿进程、僵尸进程

    ◼ 父进程运行结束,但子进程还在运行(未运行结束),这样的子进程就称为孤儿进程 (Orphan Process)。 ◼ 每当出现一个孤儿进程的时候,内核就把孤儿进程的父进程设置为 init ,而 init 进程会循环地 wait() 它的已经退出的子进程。这样,当一个孤儿进程凄凉地结束 了其生

    2024年02月16日
    浏览(55)
  • Linux高并发服务器开发---笔记1(环境搭建、系统编程、多进程)

    0613 首先这整个系列笔记属于笔记①:牛客校招冲刺集训营—C++工程师中的 第四章 笔记。 视频课链接: 视频1:Linux高并发服务器开发(40h); 视频2:第4章 项目制作与技能提升(录播)(26h30min); 视频课3: 第5章 高频考点与真题精讲(录播)中的 5.10-5.13 项目回顾 有个学

    2024年02月15日
    浏览(67)
  • 【Linux】进程学习(1)---理解进程概念

    数学家冯·诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成(运算器、控制器、存储器、输入设备、输出设备),这套理论被称为冯·诺依曼体系结构。我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大

    2023年04月25日
    浏览(57)
  • [1Panel]开源,现代化,新一代的 Linux 服务器运维管理面板

    本期测评试用一下1Panel这款面板。1Panel是国内飞致云旗下开源产品。整个界面简洁清爽,后端使用GO开发,前端使用VUE的Element-Plus作为UI框架,整个面板的管理都是基于docker的,想法很先进。官方还提供了视频的使用教程,本期为大家按照本专栏的基本内容进行多方面的测评。

    2024年02月07日
    浏览(94)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包