Linux进程概念

Linux进程概念

Linux进程基本概念

  • 课本概念:程序的一个执行实例,正在执行的程序等

  • 内核观点:担当分配系统资源(CPU时间,内存)的实体。

    在Windows/Macos 上,当我们启动了一个软件时,本质上就是启动了一个进程

    在Linux上,运行一条命令,或者启动一个可执行程序,其实就是在系统层面创建了一个进程

Linux管理进程方式

一个操作系统时可以同时运行多个程序的,也就是可以同时存在大量的进程

在Linux中,Linux是如何管理进程的?

操作系统需要有大量的PCB数据结构来描述对应的进程,PCB包含了对应进程的所有属性

其中所有的属性与进程所有的内容是没有直接太大关系的。

在这里插入图片描述

描述进程—PCB

  • 进程信息被放在一个叫做进程控制块数据结构中,可以理解为进程属性的集合

  • 课本上称之为PCB(process control block),Linux操作系统下的PCB是: task_struct

在这里插入图片描述

task_struct内容分类

  • 标示符: 描述本进程的唯一标示符,用来区别其他进程。

  • 状态: 任务状态,退出代码,退出信号等。

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

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

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

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

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

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

  • 其他信息

查看进程

ps命令的使用

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

通过系统调用获取进程的PID和PPID

通过使用系统调用函数,getpid()getppid() 即可分别获取进程的PID和PPID。
在这里插入图片描述

通过系统调用创建进程—fork

fork概念

fork是一个系统调用级别的函数,其功能就是创建一个子进程。

如图:程序中只有一条打印语句,为什么会打印两次呢?

在这里插入图片描述

结果:
在这里插入图片描述

fork特性与用法

  • fork有两个返回值

  • 父子进程代码共享,数据各自开辟空间,私有一份(采用写时拷贝)。

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

为什么会有两个返回值?

在这里插入图片描述

在这里插入图片描述

进程状态

一个进程从创建而产生至撤销而消亡的整个生命期间,有时占有处理器执行,有时虽可运行但分不到处理器,有时虽有空闲处理器但因等待某个时间的发生而无法执行,这一切都说明进程和程序不相同,进程是活动的且有状态变化的,于是就有了进程状态这一概念。

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

在这里插入图片描述

运行状态-R

一个进程处于运行状态(running),并不意味着进程一定处于运行当中,运行状态表明一个进程要么在运行中,要么在运行队列里。也就是说,可以同时存在多个R状态的进程。

**注意:**所有处于运行状态,即可被调度的进程,都被放到运行队列当中,当操作系统需要切换进程运行时,就直接在运行队列中选取进程运行。
在这里插入图片描述

在这里插入图片描述

浅度睡眠状态-S

一个进程处于浅度睡眠状态(sleeping),意味着该进程正在等待某件事情的完成,处于浅度睡眠状态的进程随时可以被唤醒也可以被杀掉(这里的睡眠有时候也可叫做可中断睡眠(interruptible sleep))。

在这里插入图片描述

深度睡眠状态-D

一个进程处于深度睡眠状态(disk sleep),表示该进程不会被杀掉,即便是操作系统也不行,只有该进程自动唤醒才可以恢复。该状态有时候也叫不可中断睡眠状态(uninterruptible sleep),处于这个状态的进程通常会等待IO的结束。

例如,某一进程要求对磁盘进行写入操作,那么在磁盘进行写入期间,该进程就处于深度睡眠状态,是不会被杀掉的,因为该进程需要等待磁盘的回复(是否写入成功)以做出相应的应答。(磁盘休眠状态)

暂停状态-T

在这里插入图片描述

僵尸状态-Z

在这里插入图片描述

死亡状态-X

死亡状态只是一个返回状态,当一个进程的退出信息被读取后,该进程所申请的资源就会立即被释放,该进程也就不存在了,所以你不会在任务列表当中看到死亡状态(dead)。

注意:此状态瞬时性非常强,一般都看不到这个状态

僵尸进程

一个进程若是正在等待其退出信息被读取,那么我们称该进程处于僵尸状态。而处于僵尸状态的进程,我们就称之为僵尸进程。

在这里插入图片描述

僵尸进程的危害

  1. 僵尸进程的退出状态必须一直维持下去,因为它要告诉其父进程相应的退出信息。

    可是父进程一直不读取,那么子进程也就一直处于僵尸状态。

  2. 僵尸进程的退出信息被保存在task_struct(PCB)中,僵尸状态一直不退出,那么PCB就一直需要进行维护

  3. 若是一个父进程创建了很多子进程,但都不进行回收,那么就会造成资源浪费,因为数据结构对象本身就要占用内存。

  4. 僵尸进程申请的资源无法进行回收,那么僵尸进程越多,实际可用的资源就越少,也就是说,僵尸进程会导致内存泄漏

孤儿进程

父进程先退出,那么将来子进程进入僵尸状态时就没有父进程对其进行处理,此时该子进程就称之为孤儿进程
若是一直不处理孤儿进程的退出信息,那么孤儿进程就会一直占用资源,此时就会造成内存泄漏。

因此,当出现孤儿进程的时候,孤儿进程会被1号init进程领养,此后当孤儿进程进入僵尸状态时就由int进程进行处理回收

在这里插入图片描述

进程优先级

基本概念

优先级实际上就是获取某种资源的先后顺序,而进程优先级实际上就是进程获取CPU资源分配的先后顺序,就是指进程的优先权(priority),优先权高的进程有优先执行的权力。

优先级存在的原因?
优先级存在的主要原因就是资源是有限的,而存在进程优先级的主要原因就是CPU资源是有限的,一个CPU一次只能跑一个进程,而进程是可以有多个的,所以需要存在进程优先级,来确定进程获取CPU资源的先后顺序。

在这里插入图片描述

PRI,NI

  1. PRI代表进程的优先级(priority),通俗点说就是进程被CPU执行的先后顺序,该值越小进程的优先级别越高
  2. NI代表的是nice值,其表示进程可被执行的优先级的修正数值
  3. PRI值越小越快被执行,当加入nice值后,将会使得PRI变为:PRI(new) = PRI(old) + NI。
  4. 若NI值为负值,那么该进程的PRI将变小,即其优先级会变高。
  5. 调整进程优先级,在Linux下,就是调整进程的nice值。
  6. NI的取值范围是-20至19,一共40个级别。

更改进程优先级

方法一:

  1. top
  2. 进入top后按“r”–>输入进程PID–>输入nice值

方法二:

renice nice值 进程PID

注意

当nice为负数时,也就是要提升进程权限时,需要在命令前面加sudo提升权限

四个重要概念

在这里插入图片描述

抢占与出让

在这里插入图片描述

切换

在这里插入图片描述

环境变量

基本概念

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数

如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。

环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性

在这里插入图片描述

和环境变量相关的命令

  1. echo: 显示某个环境变量值
  2. export: 设置一个新的环境变量
  3. env: 显示所有环境变量
  4. unset: 清除环境变量
  5. set: 显示本地定义的shell变量和环境变量

如何获取环境变量

通过代码获取

命令行的第三个参数

#include <stdio.h>
int main(int argc, char *argv[], char *env[])
{
   int i = 0;
   for(; env[i]; i++)
   {
      printf("%s\n", env[i]);
   }
   return 0;
}
通过系统调用获取

通过getenv函数访问特定的环境变量

#include <stdio.h>
#include <stdlib.h>
int main()
{
    //获取PATH环境变量
 	printf("%s\n", getenv("PATH"));
 	return 0;
}

环境变量的特性

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

命令行参数特性

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值