深入解析Linux进程管理

发布时间:2026/8/20 22:09:41

深入解析Linux进程管理
一.进程与程序程序存储在磁盘上可执行的指令的集合是一个文件。进程程序一次执行的过程伴随着资源的分配与释放消耗CPU资源、内存资源、时间片(CPU给进程分配运行的时间)。两者区别程序是静态的一般存放在磁盘上没有执行的概念。进程是动态的运行在内存中并伴随着资源的分配与释放。程序与进程的构成C语言运行时内存分布程序进程构成text代码段rodata只读数据段data数据段bss未初始化的段text代码段rodata只读数据段data数据段bss未初始化的段堆、栈、系统相关的信息命令行参数、环境变量区别只有用户数据段和正文段可以使用size命令查看程序构成不仅有用户数据段和正文段还多了系统数据段包括堆、栈和系统相关的信息二. 虚拟地址与物理地址地址空间32位的系统地址空间2^324G64位的系统地址空间2^648G虚拟地址和物理地址的由来——地址空间不隔离虚拟地址到物理地址的映射不同的进程虚拟地址可能相同TLB为快表主要用于加速MMU将虚拟地址转换为物理地址的速度本质上是一块高速缓存。三.Linux系统进程类型交互进程定义由shell维护需要用户在终端手动启动的进程通过shell和用户进行交互(用户交互输入/输出)特点依赖终端环境通常在前台运行生命周期与用户操作相关批处理进程定义无需用户实时交互优先级比较低按预设任务序列自动运行的进程通常在后台执行特点优先级较低(避免占用关键资源)多通过脚本或任务调度工具启动守护进程定义系统启动时自动运行的后台进程独立于终端通常随系统启动而启动随系统关闭而终止用于提供持续服务特点运行时脱离终端四.进程的状态常见状态运行状态(R)也称之为可运行状态就是处于运行状态的进程正在CPU执行或等待CPU调度可中断睡眠状态(S)进程在等待某个事件(如等待I/O操作、等待特定信号等)完成可被信号唤醒不可以中断睡眠状态(D)进程正在等待关键硬件操作完成不能被信号中断确保数据完整性停止状态(T)进程被暂停执行通常是收到了特定的信号(如SIGSTOP(暂停进程))或者在调试程序时被调试器暂停可被信号恢复执行(如SIGCONT)僵尸状态(Z)进程已终止但资源未被回收等待父进程进行回收死亡态(X)进程彻底终止资源全部释放是一个瞬间状态几乎无法观测到附加状态(前台进程组)表示进程属于前台进程组与当前终端直接关联用户可以通过终端输入直接控制l (多线程进程)表示进程包含线程(LWP)通常对应多线程程序N(低优先级进程)表示进程的nice值为正数(NI 0)优先级较低CPU资源优先给其他进程(高优先级进程)表示进程的nice值为负数(NI 0)优先级较高会优先获取CPU资源s(会话leader进程)表示进程是会话首进程负责管理一个会话中的其他进程L(进程持有锁)表示进程正在持有某个文件锁或者是资源锁可能在等待其他进程释放锁资源转化图1.我们利用fork()函数创建了一个进程,此时处于就绪态2.进程通过进程调度资源来抢占CPU,调度完成就会进入运行态3.CPU此时会给进程分配时间片,时间片消耗完后进入等待态4.等待态有两种情况,可中断与不可中断,它们都可以回到就绪态5.程序在运行的时候,若是收到了一个SIGSTOP信号,则会变成停止态6.停止态的时候如果收到SIGCONT信号,则会回到就绪态7.当程序正常结束的时候,或者被SIGKILL信号杀死的时候我们程序由于有一些资源没有被释放,变成僵尸态。一般僵尸态若不指定回收对象会被Init(1)进程回收注意新版ubuntu系统中,init进程被systemd进程替代,他们进程号都为1特殊PID特殊PID进程名称作用与职责0号idle系统启动后的第一个进程负责空闲CPU调度(无其他进程运行时idle进程占用CPU)1号init由0号进程创建负责初始化系统硬件、启动服务、回收孤儿进程(如关机时清理残留进程)2号kthreadd负责内核进程调度(管理系统后台的内核级任务如磁盘IO、内存回收)五.进程的相关命令ps命令功能用于查看当前系统中进程的快照信息包括进程的PID(进程标识符)、所属用户、占用CPU和内存资源情况等常用具体命令选项功能ps -ef-e: 列出系统中所有进程-f : 以全格式显示进程信息查看当前所有进程ps -aux-a显示所有终端进程-u以用户资源视角为中心的格式-x显示无终端进程(如后台服务)展示进程资源占用百分比(如占用CPU百分比、占用内存百分比等)ps -eo 字段1,字段2...-e列出系统中所有进程-o自定义输出格式精准提取进程字段(如pid,comm)ps -l-l长格式以长格式查看当前终端进程详细信息top命令功能动态的显示系统中各个进程的资源使用情况可以实时查看进程的CPU使用率、内存使用量、线程数等并且能按照不同的指标进行排序htop命令功能是一个交互式的进程查看工具相比top具有更友好的用户界面支持鼠标操作可以更加直观地展示进程树结构kill命令功能用于向进程发送信号最常见的就是用来终止进程。通过指定进程的PID发送特定的信号让进程执行相应的操作比如终止、暂停等等信号名含义默认操作SIGINT该信号在用户键入INTR字符通常是CtrlC时发出终端驱动程序发送此信号并送到前台程序中的每一个进程终止SIGQUIT该信号和SIGINT类似但由QUIT字符通常是Ctrl\来控制终止SIGKILL该信号用来立即结東程序的运行,并且不能被阻塞、处理和忽略。终止SIGALRM该信号当一个定时器到时的时候发出。终止SIGSTOP该信号用于暂停一个进程,且不能被阻塞、处理或忽略。暂停进程SIGTSTP该信号用于暂停交互进程,用户可键入SUSP字符(通常是CtrlZ)发出这个信号。暂停进程SIGCHLD子进程改变状态时,父进程会收到这个信号忽略SIGABORT该信号用于结束进程终止killall命令功能根据进程名来终止进程当系统中有多个同名进程需要同时终止时killall就非常方便命令格式信号编号对应信号名称功能说明killall 进程名终止所有名为“进程名”的进程(默认发SIGTERM)killall -9 进程名9SIGKILL强制终止所有同名进程killall -i 进程名终止前逐一询问确认(交互模式)pstree命令功能以树结构显示进程之间的父子关系从系统初始化init开始直观地展示整个系统进程的层次结构bg/fg命令命令格式功能说明注意事项bg 作业号将挂起的进程放到后台继续运行若不指定作业号默认操作最近一个被挂起的作业作业号可通过 jobs -l命令查看获取fg 作业号把后台运行的进程放到前台终端运行恢复与终端交互若不指定作业号默认将最近一个后台作业调至前台调至前台后进程会占据终端输入输出直到进程结束或再次被暂停nice/renice命令命令功能说明命令格式nice启动进程时设置优先级未指定值时默认优先级为10nice -n 优先级值 要执行的命令renice调整已运行进程优先级可针对单进程、用户所有进程进行调整renice 新优先级值 -p 进程PID(单进程)renice 新优先级值 -u 用户名(用户所有进程)六.运行新进程在UNIX体系中,创建进程与加载新的二进制镜像分离exec系统调用一次系统调用会把二进制程序加载到内存中,替换地址空间原先内容,并开始执行。这个过程称为“执行”fork()函数另一个不同的系统调用是用于创建一个新进程,他相当于是复制其父进程练习-多进程实现文件分块拷贝// 多进程实现文件分块拷贝 // 父进程拷贝源文件的前半部分 // 子进程拷贝源文件的后半部分 #include stdio.h #include sys/types.h #include sys/stat.h #include fcntl.h #include unistd.h // 函数获取源文件的大小 int get_srcfile_size(const char *srcfile) { // 以只读的方式打开源文件 int fd 0; if (-1 (fd open(srcfile, O_RDONLY))) { perror(打开源文件失败); return -1; } printf(打开源文件成功\n); // 获取源文件的大小 lseek off_t s 0; if (-1 (s lseek(fd, 0, SEEK_END))) { perror(获取源文件大小失败\n); return -1; } printf(获取源文件大小成功,s %ld\n, s); // 关闭文件 close(fd); // 将源文件的大小进行返回 return s; } // 函数父子进程进行文件拷贝 /*参数说明 srcfile源文件的路径 destfile目标文件的路径 offset拷贝的起始位置 size拷贝的大小 */ int file_copy(const char *srcfile, const char *destfile, off_t offset, off_t size_len) { // 1.以只读的方式打开源文件 int src_fd 0; if (-1 (src_fd open(srcfile, O_RDONLY))) { perror(打开源文件失败); return -1; } printf(打开源文件成功,src_fd%d\n, src_fd); // 2.以只写的方式打开目标文件 // 如果目标文件不存在则创建新的文件 // 如果目标文件存在则将原有的内容进行清空 int dest_fd 0; if (-1 (dest_fd open(destfile, O_WRONLY | O_CREAT | O_TRUNC, 0664))) { perror(打开目标文件失败); return -1; } printf(打开目标文件成功,dest_fd%d\n, dest_fd); // 3.修改光标的位置(父子进程拷贝的源文件中的内容是不同的) // SEEK_SET是从文件的开头进行偏移 lseek(src_fd, offset, SEEK_SET); // 父进程 lseek(dest_fd, offset, SEEK_SET); // 子进程 // 4.循环拷贝工作 char buf_read[BUFSIZ] {0}; ssize_t read_size 0; // 读取到的字节数 ssize_t size 0; // 统计总的字节数 // 循环从源文件中读取数据,写入到目标文件中 // 注意拷贝读取到的内容要比需要拷贝的内容的字节数要多 // 这个时候就需要进行特殊的处理 while (0 (read_size read(src_fd, buf_read, sizeof(buf_read)))) { // 统计读取到的总字节数 size read_size; // 当size累计超过或者是等于需要拷贝的大小的时候 // 说明本次读取到的内容是需要进行截断的 // 我们只需要取到我们需要的部分就可以了 if (size size_len) { // 源文件大小50个字节 //父25 子25 //每次读取10个字节 //10 10 10 需要从30中截取出来5个字节 //父进程才可以拿到25个字节 //所以第三次操作的时候父进程只需要写5个字节即可 //size-size_len:超过的字节数 //read_size-(size-size_len):剩下要拷贝的字节数 write(dest_fd,buf_read,read_size-(size-size_len)); //跳出循环,拷贝结束 break; } else { // 写入到目标文件中 write(dest_fd, buf_read, read_size); } } // 5.关闭文件 close(src_fd); close(dest_fd); //进行返回 return 0; } int main(int argc, const char *argv[]) { // 1.对输入参数的参数个数进行判断 if (argc ! 3) { printf(输入的参数个数有误\n); printf(usage:./a.out srcfile destfile\n); return -1; } // 2.获取源文件的大小 -- 函数 int srcfile_size get_srcfile_size(argv[1]); // printf(源文件的大小为%d\n,srcfile_size); if (srcfile_size 0) { perror(获取源文件大小失败); return -1; } // 3.父子进程拷贝源文件 -- 函数 // 3.1 使用fork函数创建子进程 // 3.2 父子进程拷贝文件 pid_t pid fork(); if (pid 0) { // 父进程 // 父进程拷贝源文件的前半部分 file_copy(argv[1], argv[2], 0, srcfile_size / 2); } else if (pid 0) { // 子进程 // 子进程拷贝源文件的后半部分 file_copy(argv[1], argv[2], srcfile_size / 2, srcfile_size - srcfile_size / 2); } return 0; }

相关新闻

Java 找出数组中最大的 k 个元素(Find k largest elements in an array)

Java 找出数组中最大的 k 个元素(Find k largest elements in an array)

2026/8/20 22:09:41

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。 给定一个数组arr[]和一个整数k,任务是找出给定数组中最大的 k 个元素。输出数组中的元素应按降序排列。 例如: 输入: [1, 23, 12, 9, 30, …

免费格式转换工具怎么选,2026这这5款更实用

免费格式转换工具怎么选,2026这这5款更实用

2026/8/20 22:09:41

做视频、搞办公,最怕遇到的“拦路虎”就是格式不兼容。视频打不开、PDF改不了、图片太大发不出去……这些问题在2026年虽然技术已经很成熟,但好用的工具依然难找。很多软件打着“免费”的旗号,要么限制次数,要么加水印&#xff0c…

【完整源码+数据集+部署教程】月球陨石坑检测系统源码 [一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

【完整源码+数据集+部署教程】月球陨石坑检测系统源码 [一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

2026/8/20 22:09:41

背景意义 随着人类对月球探索的深入,月球表面的特征和变化成为了科学研究的重要内容。月球陨石坑的形成与演化不仅能够揭示月球的地质历史,还为理解太阳系其他天体的演化提供了重要线索。陨石坑的数量、分布及其形态特征是研究月球表面环境和历史的重要…

蓝桥杯Vue

蓝桥杯Vue

2026/8/20 23:19:45

el-rate 组件 show-score 属性详解1. 作用show-score 是 Element UI 评分(el-rate)内置布尔属性:加上 show-score:星星右侧实时显示当前打分数字分值不写该属性:只展示星星,不显示分数数字 默认值&#xff…

基于MQTT与ESP8266的物联网遥控车:从游戏手柄到物理执行

基于MQTT与ESP8266的物联网遥控车:从游戏手柄到物理执行

2026/8/20 23:19:45

1. 项目缘起:当游戏手柄遇上遥控车几年前,我在整理旧物时翻出了一台尘封已久的玩具遥控车。它结构简单,一个塑料底盘,两个直流电机驱动后轮,一个舵机控制前轮转向。看着它,一个念头突然冒了出来&#xff1a…

OR值与HR值Meta分析结果解读:森林图与漏斗图解读

OR值与HR值Meta分析结果解读:森林图与漏斗图解读

2026/8/20 23:19:45

OR值和HR值Meta分析结果解读 一、方法概述 Meta分析是一种将多项独立研究结果进行定量合并的统计分析方法,其核心思想是通过加权平均的方式增大样本信息量,从而提高统计检验效能并获得更为精确的效应量估计。在医学、流行病学及社会科学领域&#xff0…

K均值聚类结果解读:轮廓系数与聚类中心特征

K均值聚类结果解读:轮廓系数与聚类中心特征

2026/8/20 23:19:45

K均值聚类分析结果解读一、分析方法介绍K均值聚类分析(K-means Clustering)是一种经典的无监督学习方法,其基本思想是将n个样本划分为k个互不重叠的簇(cluster),使得每个样本到其所属簇中心的距离最小化。该…

IGBT驱动电路设计:从核心原理到工程实践的关键技术解析

IGBT驱动电路设计:从核心原理到工程实践的关键技术解析

2026/8/20 23:19:45

1. 从“开关”到“心脏”:为什么IGBT驱动如此关键如果你拆开一台变频空调、一台工业变频器,或者一辆电动汽车的电机控制器,在密密麻麻的电路板深处,你总会找到几个被巨大散热片压着的黑色方块——那就是IGBT。很多人把IGBT称为电力…

从1只到30只:PKHeX-Plugins 把宝可梦数据合法化与批量生成变成几次点击

从1只到30只:PKHeX-Plugins 把宝可梦数据合法化与批量生成变成几次点击

2026/8/20 23:09:44

从1只到30只:PKHeX-Plugins 把宝可梦数据合法化与批量生成变成几次点击 【免费下载链接】PKHeX-Plugins Plugins for PKHeX 项目地址: https://gitcode.com/gh_mirrors/pk/PKHeX-Plugins 如果你也曾在深夜对着宝可梦编辑器里那一排"红色感叹号"束手…

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

2026/8/19 3:36:59

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

2026/8/20 21:07:35

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

2026/8/19 8:02:16

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

微信聊天记录如何完整导出?WeChatMsg备份指南:HTML/Word/CSV一键转换

微信聊天记录如何完整导出?WeChatMsg备份指南:HTML/Word/CSV一键转换

2026/8/20 0:08:45

微信聊天记录如何完整导出?WeChatMsg备份指南:HTML/Word/CSV一键转换 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com…

B站缓存m4s打不开?m4s-converter无损合成MP4,实测1.46GB仅5秒

B站缓存m4s打不开?m4s-converter无损合成MP4,实测1.46GB仅5秒

2026/8/20 0:08:45

B站缓存m4s打不开?m4s-converter无损合成MP4,实测1.46GB仅5秒 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 判断你是否…

告别白模时代:Blender3mfFormat 让 3MF 导入导出一次跑通设计到打印

告别白模时代:Blender3mfFormat 让 3MF 导入导出一次跑通设计到打印

2026/8/20 0:08:45

告别白模时代:Blender3mfFormat 让 3MF 导入导出一次跑通设计到打印 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 按 3MF 官方规范的字面意思,一…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/17 12:00:53

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/15 10:10:27

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/18 12:20:24

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…