什么是进程,如何管理进程

在这里插入图片描述

基本概念(什么是进程?)

在这里插入图片描述

  • 课本概念:程序的一个执行实例,正在执行的程序等
  • 内核观点:担当分配系统资源(CPU时间,内存)的实体。

描述进程-PCB

  • 进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
  • 课本上称之为PCB(process control block),Linux操作系统下的PCB是: task_struct
    在这里插入图片描述
    kernel是操作系统,他就像一款软件一样,对进程进行管理。
    管理进程是通过进程的属性数据进行管理的。
    即通过PCB:
struct tack_struct
{int pid;int status;int prio;void* memptr;.....
​	上下文;struct task_struct* next;
};

这是固定的一种数据结构,所以进程 = task_struct+ 程序的代码和数据
在这里插入图片描述
CPU将每个task_struct进行排队,会根据优先级进行调度。就像面试官面试简历一样。是一个动态的特征。

进程 = 内核数据结构(task_struct) + 程序代码和数据

运行起来的程序 ----> 进行会根据task_struct属性 被OS调度器进行调度,运行。

为什么要有PCB?

因为OS要管理,先描述再组织。

task_struct 内部有什么属性?

Linux中的进程查看

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在一个终端中运行程序,另一个进行查看
在这里插入图片描述

ps:查看进程
有俩个进程,这是因为 我们使用grep myproc的原因,grep本身也是一个进程,刚好查看myproc时,grep进程中有关键字myproc

ps ajx | head -1 && ps ajx | grep myproc
在这里插入图片描述

我们可以再过滤掉grep:
ps ajx | head -1 | && ps ajx | grep myproc | grep -v grep
在这里插入图片描述

1.把程序运行起来,双击或者./xxx.exe --> 本质就是在系统中启动了一个进程.
进程分为:
a. 执行完就退出的进程 – ls pwd等指令
b. 一直不退出,直到用户退出 – 常驻进程
在运行myproc

ps ajx | head -1 && ps ajx | grep myproc查看运行的进程
在这里插入图片描述

不查看grep在后面加上-v即可:
在这里插入图片描述

进程的id

每一个进程一旦运行就会有自己的pid
在这里插入图片描述

编译代码后运行,再另一个终端上查看pid
在这里插入图片描述
在这里插入图片描述
使用kill -9 + pid即可杀掉指定pid 的进程。
在这里插入图片描述

根目录下的proc文件

在这里插入图片描述

proc全程process,里面的以数字命名的文件实际上就是进程的pid内部都是进程的属性

运行进程后:
在这里插入图片描述

查看进程是否在/proc内:
在这里插入图片描述

杀掉进程后查看是否在:
在这里插入图片描述

说明进程在proc中是实时更新的。

进程文件中有什么

exe(原执行文件)

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

其中exe对应的是进程文件的位置

当我们删掉可执行程序:
在这里插入图片描述

发现进程还在运行
在这里插入图片描述

这是因为,进程文件已经在内存中,而我们删除的是磁盘中的文件

接着我们再次查看进程文件内部:
在这里插入图片描述

发现exe变为红色,在不断跳动。

所以exe指向的是原执行文件

cwd(当前工作目录)

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

log.txt被创建时,需要以全路径的方式进行拼接。所以需要cwd

在这里插入图片描述

改变工作目录

在这里插入图片描述

chdir("/"):改变到根目录
在这里插入图片描述

实际上再/proc目录下可以查看到所有进程的属性信息,ps指令实际上就是对该目录下的文件进行文本分析

proc目录不是磁盘级文件,而是内存级文件

ppid

Linux中的进程都是父进程创建的。
在这里插入图片描述

ppid:
在这里插入图片描述

发现,每次终止之后重新运行,ppid都不变。我使用ps查看一下。

惊奇的发现它叫做bash
在这里插入图片描述
shell是所有命令解释器的统称,bash则是Linux中的解释器。

bash是命令行解释器。
在这里插入图片描述

如果我们打开了俩个终端,那么就会有俩个-bash
在这里插入图片描述

使用fork函数创建进程。
在这里插入图片描述
在这里插入图片描述

一个父进程可有多个子进程,但一个子进程只有一个父进程
树状结构

理解子父进程

父进程的fork返回值是>0.

子进程的fork返回值是0.
在这里插入图片描述
在这里插入图片描述

代码会共享,数据会各自有一份

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

理解子进程

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值