Linux浅谈进程1

什么是进程:
正在执⾏的程序。 能分配处理器并由处理器执行的实体。简单的说就是从磁盘上拿到内存上的程序叫做进程
我们把描述进程结构体叫做PCB(进程描述符),所有的管理只管理PCB

进程=代码段+数据段+堆栈+PCB(PCB将代码段和数据段粘合起来)

我们比较一下进程与可执行程序的区别

  1. 存储位置的不同(可执行程序在磁盘中,内存映像在内存中),进程有PCB。
  2. 进程具有动态属性,文件在硬盘上只有存储状态,可执行程序是静态的(普通的二进制文件)
  3. 进程的生命周期是短暂的,程序的生命周期是永久的。
  4. 一个进程只能对应一个程序,一个程序可以对应多个进程。

我们先来看几条关于进程的指令:

  1. ps:只显示当前只能终端的进程状态
  2. ps -e:查看前后台进程的状态
  3. ps -ef:显示更为详细的进程信息
  4. ps aux:查看进程
  5. ps aux | grep(进程名):查看进程
  6. getpid:子进程(bash)
  7. getppid:父进程()

我们是通过fork()创建的子进程

父进程会返回子进程id,子进程返回0;
原因:父进程有多个子进程,需要区分,而子进程只有一个,不需要区分

若出错pid==-1
检测方法:

  1. printf(“%s\n”,strerror(errno));
  2. perror(fork);
    (记得加头文件)
    父子进程代码段是共享的,父子对应的都看为只读的,这样代码段数据段都为共享,若数据段要进行修改,则进行写时拷贝,不占用磁盘内存,为虚拟的。

1
22
如图我们创建了子进程
结果是他们会出现相同的地址,不同的值。
虚拟地址(地址空间上的地址),一样物理地址不一样
创建的pcb以父进程为模版,代码 共享数据各自有一份(利用了写时拷贝)。
也就是说,fork创建的子进程,与父进程的地址相同但是内容不同。
那么它是怎么做到的呢?

这里写图片描述

页表:写入物理内存与虚拟内存完成映射工作。
mmu:结合页表完成了虚拟地址与物理地址的转换。

如上图是我们虚拟地址转换为物理地址的过程,
这样我们就明白了代码共享和数据各自有一份是怎么做到的了,代码在物理地址中存储,通过页表和mmu映射到同一物理内存就可以共享,映射到不同的虚拟地址中就数据各一份。

下来我们看一下环境变量
环境变量具有全局属性:被子进程继承,当前进程以及子进程都可以被继承。
局部变量:只有本shell/进程内部存在。

获取环境变量的方法:

关于环境变量在后面的博客会专门介绍,在这里先简单介绍下
1,env(第三个参数)
1

运行该程序出来的结果为:
32
会出来好多环境变量

2,environ(第三方变量):无头文件,使用时要声明(声明不开辟空间)
21

程序运行出来:
32

同样获取到了环境变量。

但是以上两种方法并不推荐使用;
下面我们看一下第三种方法

3,使用getenv()函数获取环境变量——(头文件为#include<stdlib>
32

程序运行出来:
32
第三种方法是推荐大家使用的。

进程的状态

“R (running)”——运行状态(并不意味进程一定在运行中,表明进程在运行中或在运行队列中)
“S (sleeping)”——睡眠状态(做事情,进程在等待事件完成,可以自己或其他程序唤醒也叫做可中断睡眠)
“D (disk sleep)”——磁盘睡眠状态(不会因为任何命令/指令终止,保证数据完整性,只能关机重启,也叫不可中断睡眠)
“T (stopped)”——暂停状态(什么事情也不做)
“t (tracing stop)”——
“X (dead)”——死亡状态
“Z (zombie)”——僵尸状态

所有进程都保存在PCB中

补充几条指令:
kill -l (查看信号列表)
22

在这里我们学习使用编号为9,18,19.
9)SIGKILL: 终止进程
18)SIGCONT:继续进程
19)SIGSTOP:暂停进程

kill -对应编号或名称 进程

进程优先级

学习一条指令
ps -l:显示当前终端下开启的任务。
ps -al:显示当前终端下所有的任务。
32
UID : 代表执行者的身份
PID : 代表这个进程的代号
PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号
PRI :代表这个进程可被执行的优先级,其值越小越早被执行
NI :代表这个进程的nice值

PRI也还是比较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此值越小进程的优先级别越高。
NI:就是我们所要说的nice值,其表示进程可被执行的优先级的修正数值。
如前面所说,PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:
PRI(new)=PRI(old)+nice。这样,当nice值为负值的时候,那么该程序将会优先级值将变 小,即其优先级会变高,则其越快被执行。 到目前为止,更需要强调一点的是,进程的nice值不是进程的优先级,他们不是一个概念, 但是进程nice值会影响到进程的优先级变化。

修改进程优先级的命令主要有两个:nice,renice

1,nice
nice -n 数值 +文件名
nice的范围为-20 ~ 19
PRI的范围为60 ~ 99

2,renice(进程跑起来,动态调整)
renice 数值 -p 文件名
renice改变的值是从最开始的数值上改变

./myenv &(把可执行程序myenv放在后台运行)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值