🎱what 是进程?
内核的功能:
-
进程管理
-
内存管理
-
文件系统
-
网络功能
-
驱动程序
-
安全功能
由此可见进程管理的概念地图,进程管理是属于内核功能管理的一个子集。
进程的定义:
例如操作系统将一个二进制程序进入内核转化为进程。(也就是说:进程是程序运行的另一种状态)(详解:)
-
多实例*(一个程序可同时运行多个进程
-
进程都有特定的ID用来被标识
-
进程的创建(第一个进程init,后续的父子进程)
-
进程之间有一定的协助关系,同一进程的线程之间存在竞争关系
进程分类:
-
守护进程: 在系统引导过程中启动的进程和终端无关的进程
-
前台进程:与终端相关,通过终端启动的进程
但是上述两者进程可以实现相互的转换。
进程和内存的关系?
进程可以简单理解为一个二进制程序进入内核,而后变成了执行程序:进程。因此,进程是一定占据部分内存的,但是进程对内存的管理方式不一,但大致分为静态和动态的分配和统一回收。
简单理解:进程=线程+(代码+数据)= 协程+(寄存器+栈),进程具体组成部分如下图所示:
线程组成部分,如下图所示:
内存分配
简单概括,进程中包含内存,而进程中的内存分配可拆分如下所示:
-
栈:存放程序临时创建的局部变量
-
堆:存放进程运行中被动态分配的内存段
-
BSS:BSS段包含了程序中未初始化的全局变量,在内存中 bss段全部置零
-
数据段:存放可执行文件中已初始化全局变量
-
代码段:存放可执行文件的操作指令
Linux 中的进程?
pstree -p
查看Linux中进程的结构,以及 单进程
和 多进程
进程名称、进程的ID编号以及与线程之间的关系如下图所示:
🔬问题:为什么一颗CPU可以运行多个进程?
时间片:简单理解,cpu将时间分段,分别运行不同的程序。(因为最初电脑的一个cpu一次只对一个程序负责,但是一旦出现程序循环和崩溃的情况,电脑将无法执行下一个程序,故而产生了时间片的概念,均衡分配cpu在每个程序花费时间)
🧶问题:虚拟地址空间 VS 物理地址空间
问题:进程每次运行分配的位置不一样,但为什么每次打开一个程序,内容显示的位置都一致?
🎍整个流程图:应用程序(虚拟地址)——OS(操作系统,CPU中MMU将虚拟地址转化为物理地址)——获取内存,运行程序
-
程序运行在虚拟地址每次都不一样
-
每次程序打开的物理地址位置都是一样的(相当于Doctor Who 每次穿越的时间地址都不一样,但是电话亭内部的空间都一样)
⚾进程使用内存产生的问题
-
内存泄漏
-
内存溢出
-
内存不足
🏉how 进程的整个运行过程:
程序进入内核,进程的整个基本状态和转换,如下图所示:
🎭何为“僵尸态”进程?如何查看“僵尸态”
命令:显示进程的不同状态
ps aux
Z状态则为僵尸态进程
why 僵死态进程产生的原因?
-
父进程被杀死,子进程无人收拾成为(Z),便成为僵尸态进程。
进程状态的分类
-
运行态
-
就绪态
-
睡眠态
-
停止态
-
僵死态
僵死态造成的危害不言而喻,粗俗理解:站在茅坑不拉屎,尸位素餐浪费进程资源。
how 去除僵死态?
kill -18 1436 //方法一:恢复父进程
kill -9 1436 //方法二:杀死父进程
🏑LRU算法:删除经常不用的数据
文档:
粗暴理解LRU算法,可以将之比喻为 队列
先进先去,喜新厌旧。
📣how 进程之间如何通讯?
IPC-进程间通信
IPC为什么出现?IPC的定义?
-
进程1 和 进程2 交换数据需要在通过内核开辟一个“缓冲区”,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)
IPC进程间通讯的不同方式:
可参考文档:
进程管理工具
进程优先级:
-
系统优先级:1-139,数字越小,优先级越高
-
实时优先级:99-0,数值最大优先级最高
-
nice值:-20到19,对应系统优先级100-139
how命令查看优先级:
进程管理命令
可参考文档:
⛳问题:如何找到未知进程的执行程序文件路径?
#ls -l /proc/1272/exe
// chattr 一般病毒挖矿都会带有"chattr"特殊属性,不要让你删除,及时删除了也会及时的恢复,唯一的办法及时找到chattr的文件,删除"chattr"的属性,然后将文件彻底的删除
//应急方法
#touch a;chattr +i a //将病毒文件防放置文件内,这样程序就不会自动成为进程运行了
进程和CPU之间绑定命令
\#taskset --help
查看进程编号
pststat
可用 nice -n -10 ping 地址
对进程优先级的调整 ,然后再查找进程
#pgrep -a -t pst/1 //显示进程的名称
uptime 负载(5min,10min,15min):负载最好不要超过5,不然系统中则出现了消耗非常大的进程。
本文来自博客园,作者:林清|Julien,转载请注明原文链接:https://www.cnblogs.com/Julien1021/p/16341447.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性