linux描述进程状态的特色,Linux复习:进程一 《进程概念》《描述进程》《进程状态》《环境变量》《程序的地址空间》...

一,进程的概念

1.冯*诺依曼体系结构

382a3eaecd2bd6ba08d3ff23c87f9047.png

二,操作系统

1.概念:任何计算机都包含一个基本的程序集合,叫做操作系统

2.设计OS的目的:1)实现软硬件交互,管理所有的软硬件资源。2)为用户提供一个良好的执行环境

3.定位:搞管理的的软件

4.描述进程——PCB

程序是一个文件。

进程是:《 进程比程序多了一个PCB结构体 》一个PCB结构体

1.task_struct-PCB

在Linux中描述进程的结构体叫做task_struct。

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

//看到PCB4-4-1 还没有看完

了解操作系统的话,一定要在站在数据结构的层面来进行了解。

一,查看进程:

**1.当对一个程序运行之后,那就是起了一个进程,可以使用 PS 命令**

ps aux | grep 'test'(运行的程序名字)

2.**拿出头属性 --ps aux | head -1**

ps aux | head -1 && ps aux | grep 'test'(运行的程序名字)

3.top也可以查看进程 //相当于windows下的任务管理器

7c2d4059dfe30a84d365dbb22e4ac7fb.png

杀死一个进程,不一定需要ctrl +c ,也可以是 kill + 9 + 3420(PID)

二,getpid - 获取当前系统的pid

相关文件:

bef9959ea7d74373756869cdf5ed9d30.png

getpid - 获取当前系统的pid

getppid - 获取当前系统的父进程的pid

三通过系统调用查看进程–fork

参考代码如下:

1 #include2 #include3 #include4 #include5 using namespace std;

6

7 int main()

8 {

9 fork();

10 while(1){

11 cout << " getpid... "<< getpid()<< " getppid... " << getppid() << endl;;

12 sleep(1);

13

14 }

15 return 0 ;

16 }

deb7d5a392e4f720cd31f8a75b530dc4.png

这里可以看出,创建fork()进程,里面有两个进程

cef9ecd0e013ddf6fb3bdf19846180ea.png

创建父子进程的代码如下:

1 #include2 #include3 #include4 #include5 using namespace std;

6

7 int main()

8 {

9 // fork();

10 // while(1){

11 // cout << " getpid... "<< getpid()<< " getppid... " << getppid() << endl;;

12 int ret = fork();

13 if(ret < 0){

14

15 perror("fork");

16 return 1;

17 }

18 else if(ret == 0){ //child

19 printf("I am child : %d!, ret: %d\n", getpid(), ret);

20 }else{ //father

21 printf("I am father : %d!, ret: %d\n", getpid(), ret);

22 }

23

24

25 sleep(1);

26 return 0 ;

27 }

四,进程状态

R运行状态(running): 并不意味着进程一定运行中,它表明进程要么是在运行中要么在运行队列里。

S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠(interruptible sleep))

D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。

T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。

X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态。

1.僵尸进程:

**概念:**当一个子进程运行完了之后,并不会直接被释放,而是先被维护起来,在维持一段时间【并且父进程没有读取到子进程的状态,子进程进入 Z (死亡进程)状态】。《 一个进程长时间处在僵尸状态吧,不被释放回收,就就会导致内存泄漏问题 》

(1)僵尸进程的危害:

1.不及时回收的话,一直在占内存,就是我们常说的内存泄漏

2.孤儿进程:

概念:父进程先退出,子进程就叫做孤儿进程,但是一旦产生孤儿进程,那么就要立即被领养,被最大的有实力的领养,那么就是操作系统领养。

看父进程的命令:ps axj | head -n1

我们可以看到当父进程退出之后,子进程就会变成1,被系统回收了

五,进程的优先级

权限:是有没有这个权限,看是否能做。

优先级:能做,就是看谁先做

查看优先级:ps -l

67fccd3d0735b5ead65ac62938739dab.png

PRI:优先级

我们主要看NI–叫做NICE值,

如果PRI = 80,NI= -10,那么我的优先级为70

如果PRI = 80,NI= 10,那么我的优先级为90

所以: 我们真正可以调教优先级值的是NICE值,所以我们吧NICE值叫做Linux下的修正数据,

修改优先级:

我们可以使用 top 命令,然后再按一个 r,记住这是root用户下面,普通用户不能修改,然后我们还可以试一下:优先级最大为99,最小为60,NI的最大范围为0—19,最小范围为-20—0,

六,其他概念:

竞争性 系统进程数量太多但是CPU数量只有少数,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便具有了优先级

独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰

并行: 多个进程在多个CPU下分别,同时进行运行,这称之为并行

并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发

七,环境变量

PATH : 指定命令的搜索路径

HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)

SHELL : 当前Shell,它的值通常是/bin/bash。

查看环境变量命令:

echo:$PATH

exprot【也可以创建环境变量,导入到系统的环境变量中】:导出环境变量 export PATH = P A T H ( 把 老 的 保 存 起 来 , 要 不 容 易 覆 盖 了 ) : + 添 加 自 己 路 径 ( p w d 查 看 自 己 的 路 径 ) ∗ ∗ e x p o r t P A T H = PATH(把老的保存起来,要不容易覆盖了):+添加自己路径(pwd查看自己的路径) **export PATH=PATH(把老的保存起来,要不容易覆盖了):+添加自己路径(pwd查看自己的路径)∗∗exportPATH=PATH:+添加自己路径**

添加这个路径之后,那么在这个路径下面运行什么程序,都是可以运行的呢

echo: $HOME

当Linux再开启时,为用户打开其默认的工作目录下。

env:查看系统中的大部分环境变量

环境变量:是系统本身定义的环境变量,他有着特殊的用途

八,程序的地址空间

4c865424922fbc0a50d01d12032942b0.png

地址空间的描述:

eeba0a74791e9f18e62c36e7364d6aa3.png

通过上面这张图,我们据可以了解,两个进程在运行时,是相互独立的 ,是通过页表将虚拟地址映射到物理内存上面的,将数据存放再不同的物理内存上面的。

所以: 他们的虚拟地址是相同的,但是物理地址是不同的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值