当前位置: 首页 > news >正文

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

在这里插入图片描述

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

在这里插入图片描述

  • 课本概念:程序的一个执行实例,正在执行的程序等
  • 内核观点:担当分配系统资源(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:查看进程,当终止了程序之后,接着查看会看到ps ajx | head -1 && ps ajx | grep myproc
在这里插入图片描述

这是因为 我们使用grep myproc的原因,grep本身也是一个进程,刚好查看myproc时,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目录不是磁盘级文件,而是内存级文件

例如:
村中100人,有20个低保名额,最后调查,真正低保名额只有十个,因为有十个人不在村里。

ppid

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

ppid:
在这里插入图片描述

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

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

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

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

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

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

理解子父进程

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

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

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

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

理解子进程

在这里插入图片描述

http://www.xdnf.cn/news/303103.html

相关文章:

  • 【2025】Visio 2024安装教程保姆级一键安装教程(附安装包)
  • Java基础学完,继续深耕(0506)SQL--多表关系
  • Kotlin-访问权限控制
  • unittest自动化测试实战
  • 文件上传漏洞篇:upload-labs靶场搭建
  • 栈与队列详解及模拟实现
  • 未来 CSS:变量、容器查询与新特性的探索
  • 硬件工程师面试常见问题(16)
  • Deepseek流式操作与用户行为数据分析day01
  • 【Linux】基础开发工具
  • Flutter开发HarmonyOS实战-鸿蒙App商业项目
  • Mac电脑,idea突然文件都展示成了文本格式,导致ts,tsx文件都不能正常加载或提示异常,解决方案详细说明如下
  • Mathematica中的ResourceFunction
  • Oracle中游标和集合的定义查询及取值
  • 使用 git subtree 方法将六个项目合并到一个仓库并保留提交记录
  • Python Cookbook-7.4 对类和实例使用 cPickle 模块
  • 家庭宽带IP与IDC机房IP
  • 第100+40步 ChatGPT学习:R语言实现多轮建模
  • 用 Tailwind CSS 优化你的 Vue 3 项目! ! !
  • MySQL从入门到精通(一):MySQL介绍及数据库相关概念
  • 高级java每日一道面试题-2025年5月02日-基础篇[反射篇-编码]-使用反射,获取Class对象
  • WPF MVVM入门系列教程(五、命令和用户输入)
  • 如何使用vmstat 和 free 查看内存碎片化信息?
  • Qwen3与Deepseek R1对比(截止20250506)
  • C++ - 仿 RabbitMQ 实现消息队列(1)(环境搭建)
  • 典籍知识问答模块AI问答功能feedbackBug修改+添加对话名称修改功能
  • MySQL基础关键_009_DDL 和 DML(二)
  • vue源代码采用的设计模式分解
  • Hive优化秘籍:大数据处理加速之道
  • Excel 数据 可视化 + 自动化!Excel 对比软件