【Linux】进程

一.进程与程序的概念

程序:程序就是放在硬盘中的文件。为了实现特定任务的一系列指令的有序集合

进程

从用户角度:进程就是加载到内存上了,是程序的一次动态执行过程。(因为时钟中断,分时系统,时间片轮转的技术,CPU可以在没有执行完当前进程的情况下,执行其他进程)

从操作系统角度看;

  1. 进程是系统分配CPU,内存,时间片等系统资源的基本单位
  2. 也是系统分配资源的基本单位
  3. 每个进程都有自己独立的地址空间和运行状态

二.PCB

基本概念

进程是程序的一次动态执行过程,那么操作系统就需要有对应的数据结构来保存进程的一系列信息,这个结构体就叫做PCB,操作系统内有一个PCB链表,用来标识所有进程的相关信息

PCB内容分类

进程标识符,上下文,进程状态,优先级,程序入口地址,程序计数器等

三.程序和进程的区别

  1. 程序就是一个文件,所以程序是静态的,而进程是动态的
  2. 程序就存在硬盘里,而进程是加载到内存中,所以程序生命周期相对永久,进程的生命相对短暂
  3. 进程有PCB
  4. 程序可以对应多个进程,而进程只能对应一个程序

四.进程的虚拟地址空间


  1. c语言打出来的地址不是物理地址,而是虚拟地址
  2. 虚拟地址必须要能转换成物理地址
  3. 每个进程都有一个虚拟地址空间

虚拟地址空间在Linux内核中也是一个结构体

五.进程的状态

经典三态:就绪态,等待态,运行态。

Linux七态:用户运行态,运行态,可中断睡眠,不可中断睡眠,就绪态,暂停态,僵尸状态


  • R运行状态:并不意味着进程一定在运行当中,它表明进程要么是在运行中要么是在运行队列里
  • S睡眠状态:意味着进程在等待事件完成(这里的状态有时候也叫可中断睡眠)
  • D磁盘休眠状态,有时也叫不可中断睡眠状态。在这个状态的进程通常会等待IO的结束
  • T停止状态:可以通过发送SIGSTOP信号来暂停进程,这个被暂停的进程可以通过发送SIGCOUT信号来让进程继续运行
  • X死亡状态:这个状态只是一个返回状态

查看进程状态:ps -al  或  ps -aux


改变进程状态:

killall 进程名 杀死进程

六.进程标识符

  • 每个进程都有自己独一无二的进程标识符
  • 0:操作系统内核使
  • 1:被0号进程创建的一个用户进程
  • 自己创建的进程,进程ID的取值范围为2~pid_max

在Linux下,下面的命令用来差最大pid

cat  /proc/sys/kernel/pid_max


七.僵尸进程(Z)

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

僵尸进程危害:

  1. 维护退出状态本身就是要用数据维护,也属于进程基本信息,所以保存在task_struct中,换句话说,Z状态不退出,PCB就一直要维护
  2. 僵尸进程会占用系统资源
八.孤儿进程
  • 父进程如果提前退出,那么子进程就称之为孤儿进程
  • 孤儿进程被一号进程领养
九.进程优先级

(1)PRI表示进程优先级,值越小越快被执行,优先级越高

(2)NI就是nice值,表示进程可被执行的优先级的修正数值

(3)加入nice值后,PRI(new)=PRI(old)+nice

(4)所以调整进程优先级,在Linux系统下,就是调整nice值

NI 范围:-20--19(值越小,优先级越高)

调整优先级的方法

1.nice -n   优先级(root)



2.程序运行过程中:renice 优先级  -p  pid(root)



3.用top命令更改已经存在进程的nice(root)

  • top
  • 进入top后按"r"-->输入进程PID-->输入nice值
十.环境变量

1.本地变量:定义本地变量只能在当前进程使用,不能在子进程使用。定义:name=value(不能有空格)查看变量:echo $变量名

2.环境变量:export  name(变量名)将本地变量变为环境变量,环境变量可以在本进程和子进程使用,但不能在父进程使用

常见环境变量

  1. PATH:指定搜索命令的路径
  2. HOME:指定用户的主工作目录(家目录)。$HOME值不同(等于~)
  3. HISTSIZE:历史命令的记录总数
  4. SHELL:当前shell,它的值通常是bin/bash

3.删除变量:unset name(变量名)

4.env显示系统所有的环境变量,set显示本地定义的shell和环境变量

5.环境变量通常具有全局性getenv()获取环境变量





猜你喜欢

转载自blog.csdn.net/lw__sunshine/article/details/81057043
今日推荐