ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux ---- 进程

2021-12-11 21:58:34  阅读:166  来源: 互联网

标签:状态 优先级 PRI ---- Linux 进程 nice


Linux进程


进程是程序的一个执行实例,正在执行的程序等。 在内核的角度看 : 担当分配系统资源(CPU时间,内存)的实体。

文章目录


一、PCB(进程控制块)

PCB (process control block)

进程的信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。是一个C语言的结构体 task_struct



task_struct 内容

在Linux中描述进程的结构体叫做task_struct。
task_struct是Linux内核的一种数据结构,它会被装载到RAM(内存)里并且包含着进程的信息。


  • 标示符:描述本进程的唯一标示符,用来区别其他进程。状态:任务状态,退出代码,退出信号等。

  • 优先级:相对于其他进程的优先级。

  • 程序计数器:程序中即将被执行的下一条指令的地址。

  • 内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针

  • 上下文数据:进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。

  • l/O状态信息:包括显示的I/O请求,分配给进程的l/o设备和被进程使用的文件列表。

  • 记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。·其他信息




二、查看进程

Linux 中,万物皆文件,/proc 文件夹下就存储的进程信息。 可以用ps 或 top命令查看进程信息。

在这里插入图片描述


使用系统调用接口获取PID

在这里插入图片描述
在这里插入图片描述



通过fork创建进程

fork是一个系统调用接口,通过它创建一个子进程。

  • fork有两个返回值,它为子进程返回0,为父进程返回子进程的pid。
  • 父子进程代码共享,数据各自开辟空间,私有一份(采用写时拷贝)

fork创建的子进程和父进程共享一份用户代码,而用户数据都是独立私有的,所有进程都有独立性,例如多开几个QQ,一个崩溃了不会影响其他进程。
在这里插入图片描述

父进程和子进程的执行顺序是不确定的。
在这里插入图片描述


fork为子进程返回0,为父进程返回子进程pid,通过fork不同的返回值使两个执行流进行不同的操作,这就是并发。
在这里插入图片描述
在这里插入图片描述



三、进程状态

在Linux内核中,进程一共有以下几种状态。

在这里插入图片描述

  • R(runing) : 运行,并不是正在运行的进程才处于运行态,只要处于运行队列中的进程都是R状态。

  • S (sleeping) :浅度休眠,这种状态可以被外部信号唤醒。

  • D (disk sleep) :深度休眠,这种状态的进程操作系统也无法杀死,例如往硬盘写入数据时,此进程就处于D状态。

  • T (stopped) : 例如用kill -19 6198 命令停止 pid为6198的进程。
    在这里插入图片描述
    在这里插入图片描述
    (还可以通过kill -18 使进程继续运行)

  • t (tracing stop) : 程序在debug时,程序执行到断点处此时就处于 t 状态。

  • Z (zombie) : 僵死状态(Zombies),是一个比较特殊的状态。当进程退出并且父进程(使用wait()系统调用,后面讲没有读取到子进程退出的返回代码时就会产生僵死(尸)进程
    僵死进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。
    所以,只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态

  • X (dead) : 进程一处于这个状态,操作系统就立即回收该进程资源。


僵尸进程的危害

进程的退出状态必须一直被维持下去,因为他要告知其进程(父进程),你交给我的任务,我办的怎么样了。可父进程如果一直不读取,那子进程就一直处于Z状态,操作系统还需要继续维护该进程的PCB,就会造成内存泄露。



孤儿进程

父进程如果提前退出子进程还在运行,那么子进程就会成为孤儿进程,孤儿进程会被pid为1 (init进程)的进程领养,如果子进程进入Z状态那么回收工作也就由 init 进程执行。



无法被kill的进程

处于D状态的进程和僵尸进程,是无法被杀死的。




进程优先级

  • PRI∶代表这个进程可被执行的优先级,其值越小越早被执行
  • Nl︰代表这个进程的nice值

linux中的进程优先级由 priority值 和 nice 值确定,数值越小,优先级越高。

在这里插入图片描述


PRI & NI


PRI也还是比较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执行的先居顺序,此值越小进程的优先级别越高
那NI呢?就是我们所要说的nice值了,其表示进程可被执行的优先级的修正数值
PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRl(new)=PRI(old)+nice
这样,当nice值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被执行所以,调整进程优先级,在Linux下,就是调整进程nice值
nice其取值范围是-20至19,一共40个级别。

需要强调一点的是,进程的nice值不是进程的优先级,他们不是一个概念,但是进程nice值会影响到进程的优先级变化。
可以理解nice值是进程优先级的修正修正数据

标签:状态,优先级,PRI,----,Linux,进程,nice
来源: https://blog.csdn.net/juggte/article/details/121875373

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有