网站建设7个基个人网站怎么建

张小明 2026/1/19 20:33:25
网站建设7个基,个人网站怎么建,app推广刷量,注册网站需要注意什么文章目录一、进程1. task_struct 与核心标识符2. 系统调用获取进程 ID3. 终端查看进程 ID4. 进程和程序的区别二、/proc 目录1. 核心查看方式2. 两个关键软链接三、fork() 进程的创建1. 函数原型与返回值2. fork() 的用法3. 为什么 fork() 会返回两次#xff1f;4. 父子进程的…文章目录一、进程1. task_struct 与核心标识符2. 系统调用获取进程 ID3. 终端查看进程 ID4. 进程和程序的区别二、/proc 目录1. 核心查看方式2. 两个关键软链接三、fork() 进程的创建1. 函数原型与返回值2. fork() 的用法3. 为什么 fork() 会返回两次4. 父子进程的核心关系四、多进程创建、调度与回收1. 循环创建多子进程2. 多进程的执行顺序3. 进程退出与资源回收五、其他进程创建接口fork() vfork() exec 系列1. 核心接口对比2. fork() 与 vfork() 的关键区别高频考点六、总结1. 核心概念图谱3. 编程实战要点七、练习一基础概念二进阶题三编程题一、进程在 Linux 中进程是代码段 数据段 PCB进程控制块是操作系统进行资源分配和调度的基本单位。1. task_struct 与核心标识符Linux 内核通过struct task_struct即 PCB结构体完整描述进程它存储了进程的所有关键属性是 OS 管理进程的核心数据结构。其中最基础且关键的两个属性的是PID (Process ID)进程的唯一标识符相当于进程的“身份证号”用于 OS 区分不同进程。PPID (Parent Process ID)父进程的标识符标记当前进程的创建者体现进程间的父子亲缘关系。2. 系统调用获取进程 ID在代码中可通过以下系统调用接口直接获取进程的 PID 和 PPID需包含头文件unistd.h函数头文件功能getpid()unistd.h获取当前进程的 PIDgetppid()unistd.h获取当前进程的父进程 PID代码演示#includeiostream#includeunistd.h// 必须包含的系统头文件usingnamespacestd;intmain(){// 每次运行 PID 会动态分配但 PPID 通常为启动进程的 bash 终端 PIDcout当前进程 PID: getpid() 父进程 PPID: getppid()endl;return0;}3. 终端查看进程 ID除了代码获取还可通过终端命令直接查看进程的 PID 和 PPID最常用的命令是ps -ef查看系统所有进程的完整信息包括 PID、PPID、进程状态等。4. 进程和程序的区别可以这样生动的理解程序是“躺在磁盘上的说明书”是静态的指令集合比如.exe、.out文件只占存储资源不运行、不占用CPU/内存等系统资源没有生命周期。进程是“按照说明书干活的工人”是程序的一次动态执行实例会加载程序的指令和数据到内存占用CPU、内存、PID等系统资源有“创建→运行→等待→退出”的完整生命周期。二者的核心对应关系一个程序可以对应多个进程比如多次打开同一个浏览器就是一个浏览器程序对应多个浏览器进程一个进程也能切换执行的程序比如通过exec函数shell进程可以切换执行ls程序。二、/proc 目录Linux 提供了特殊的虚拟文件系统/proc它不占用实际磁盘空间而是实时映射内核中的进程数据是查看进程动态信息的核心途径。所以/proc 不是磁盘类别的文件本质是内核数据的接口1. 核心查看方式当进程启动后系统会自动在/proc目录下创建一个以该进程PID命名的文件夹所有与该进程相关的信息都存储在这个文件夹中查看命令ls /proc/[PID]将[PID]替换为我们要查的实际进程 ID如ls /proc/1234。2. 两个关键软链接在每个/proc/[PID]目录下有两个极具实用价值的软链接清晰区分了“程序本体”和“运行环境”cwd(Current Working Directory)指向进程当前的工作目录。应用场景代码中使用相对路径如fopen(test.txt, w)操作文件时文件会默认创建在cwd对应的目录下而非程序所在目录。exe(Executable)指向进程对应的二进制程序文件的绝对路径。核心区别exe定位的是“程序本身在哪里”cwd定位的是“程序在哪个目录下运行”。例如/usr/bin/ls程序的exe是/usr/bin/ls但cwd可能是/home/user取决于运行时的目录。三、fork() 进程的创建fork()是 Linux 创建子进程的核心系统调用也是进程编程的重中之重因为其具有“一次调用、两次返回”的特性。1. 函数原型与返回值#includeunistd.hpid_tfork();// 返回值类型为 pid_t本质是整数类型fork()的返回值是区分父子进程的关键不同返回值对应不同进程身份返回 0当前执行流程处于子进程中子进程没有子进程故返回 0 标识自身。返回 0 的整数当前执行流程处于父进程中返回值即为新创建子进程的 PID父进程需通过 PID 管理子进程。返回 -1创建子进程失败如系统进程数达到上限需在代码中处理错误。2. fork() 的用法我们来编写一个C/C程序使用fork()创建一个子进程父进程打印自身PID和子进程PID子进程打印自身PID和父进程PID直观的理解fork()的用法和其返回值的特点。#includeiostream#includeunistd.h//系统头文件usingnamespacestd;intmain(){pid_t pidfork();// 类型pid_tif(pid0){cerrFork Failed!endl;}elseif(pid0){//这里是父进程逻辑cout我是父进程 我的PID getpid() 我的子进程的PID pidendl;}else{//这里是子进程的逻辑cout我是子进程 我的PID getpid() 我的父进程的PID getppid()endl;}return0;}这段代码中乍一看和我们之前的代码没什么区别但是我们将这个代码跑起来之后我们会发现控制台打印的信息是我是父进程 我的PID 1234 我的子进程的PID 1235 我是子进程 我的PID 1235 我的父进程的PID 1234那么看输出我们就会发现为什么一个程序if的两个路径都可以走这明显不符合我们的之前的理解明明pid是一个变量怎么可能同时满足pid 0和pid 0两个条件让if的两个分支都执行了这背后的核心原因是fork()函数并非普通的函数调用——它会创建一个新的进程并且会有两次返回。我们之前对代码执行流程的理解都是基于单个进程的线性执行而fork()打破了这个逻辑我们需要从进程复制与独立执行的角度重新理解这段代码。3. 为什么 fork() 会返回两次当程序执行到pid_t pid fork();这一行时操作系统会做以下几件关键的事创建子进程操作系统会复制当前的父进程包括进程的内存空间、代码段、数据段、寄存器状态等生成一个全新的子进程。两个进程独立运行从这一行代码开始父进程和子进程会作为两个完全独立的进程同时继续执行后续的代码。不同的返回值fork()函数会分别给父进程和子进程返回不同的值给父进程返回子进程的PID一个大于0的整数给子进程返回0如果创建失败只给父进程返回-1子进程不会被创建。我们把代码的执行过程拆分成步骤就能清晰看到整个逻辑步骤1父进程执行到fork()前此时只有一个父进程假设PID为1234代码执行到pid_t pid fork();这一行准备调用fork()。步骤2fork()创建子进程产生两个执行流操作系统复制父进程生成子进程PID为1235。此时父进程的执行流fork()返回子进程的PID1235因此pid变量的值是12350。子进程的执行流fork()返回0因此pid变量的值是0。步骤3两个进程分别执行后续的if逻辑父进程因为pid 0进入else if(pid 0)分支打印父进程PID和子进程PID。子进程因为pid 0进入else分支打印子进程PID和父进程PID。这两个进程的执行是并行的具体执行顺序由操作系统的进程调度器决定可能父进程先执行也可能子进程先执行所以我们会在控制台看到两个分支的输出结果。如果把进程比作一个正在读剧本代码的演员fork()之前只有一个演员父进程在读剧本fork()发生时突然复制出一个一模一样的新演员子进程两个演员拿着相同的剧本从fork()这一行开始两个演员继续读剧本但他们会根据导演操作系统给的不同提示fork()的返回值做出不同的动作执行不同的分支。4. 父子进程的核心关系代码共享父子进程共用一套代码段只读不会重复存储节省内存资源。数据独立初始时数据完全一致但一旦某一方修改数据写时复制机制会触发为修改方开辟独立内存双方数据互不干扰。代码验证数据独立性#includeiostream#includeunistd.husingnamespacestd;intmain(){inti0;// 全局/局部变量均遵循写时复制规则pid_t pidfork();if(pid0){cerrfork 创建子进程失败endl;}elseif(pid0){// 子进程逻辑未修改 i读取初始值cout我是子进程PID: getpid()i 的值iendl;}else{// 父进程逻辑修改 i 的值为 10i10;cout我是父进程PID: getpid()i 的值iendl;}return0;}运行结果我是父进程PID: 1234i 的值10 我是子进程PID: 1235i 的值0结论父进程修改i后子进程的i仍为初始值 0验证了父子进程数据独立的特性。四、多进程创建、调度与回收实际开发中一定需创建多个子进程处理并发任务需掌握正确的创建逻辑、调度规则及资源回收机制避免僵尸进程等问题。1. 循环创建多子进程循环调用fork()时需注意子进程会继承父进程的循环变量若不及时退出子进程会继续创建“孙子进程”导致子进程数呈指数增长如循环 3 次可能创建 7 个子进程。创建 3 个子进程的正确代码#includeiostream#includeunistd.h#includesys/wait.h// wait() 函数头文件usingnamespacestd;intmain(){intchild_num3;// 计划创建的子进程数for(inti1;ichild_num;i){pid_t pidfork();if(pid0){cerrfork 创建子进程失败endl;exit(1);// 创建失败直接退出}elseif(pid0){// 子进程逻辑打印自身编号和 PID执行后立即退出cout我是第 i 个子进程PID: getpid()endl;exit(0);// 关键子进程退出避免进入下一次循环}}// 父进程逻辑等待所有子进程退出避免僵尸进程for(inti0;ichild_num;i){wait(NULL);// 阻塞等待任意一个子进程退出回收资源}cout所有子进程已退出父进程PID: getpid()结束endl;return0;}2. 多进程的执行顺序核心规则多个子进程的执行顺序由OS 的 CPU 调度器决定与创建顺序无关属于“抢占式调度”板书“多进程顺序由 OS 调度器决定不确定”。现象每次运行程序子进程的打印顺序可能不同这是正常现象若需固定顺序需使用信号、管道等同步机制。3. 进程退出与资源回收1两种特殊进程孤儿进程父进程先于子进程退出子进程会被 1 号init进程或systemd进程领养由领养进程负责回收资源不会造成资源泄漏。僵尸进程子进程退出后父进程未调用wait()或waitpid()回收其退出状态子进程的 PCB 会残留在内核中占用 PID 等系统资源长期积累会导致系统资源耗尽。2父进程回收子进程的核心接口wait(NULL)阻塞等待任意一个子进程退出回收其资源无法指定回收某个子进程。waitpid(pid_t pid, int *status, int options)更灵活的回收接口支持指定回收某个 PID 的子进程pid参数。非阻塞回收options设为WNOHANG。获取子进程的退出状态通过status参数。五、其他进程创建接口fork() vfork() exec 系列除了fork()Linux 还提供了其他进程创建相关的系统调用需明确其核心区别1. 核心接口对比接口功能描述核心特性fork()创建子进程复制父进程地址空间写时复制独立地址空间父子进程执行顺序不确定vfork()创建子进程共享父进程地址空间共享内存子进程先执行父进程挂起至子进程exec或退出exec系列execl/execv等在当前进程中加载新程序替换原有代码和数据不创建新进程仅替换进程的代码段和数据段PID 保持不变clone()底层通用接口可创建进程或线程灵活控制资源共享程度如线程共享地址空间进程独立2. fork() 与 vfork() 的关键区别高频考点对比维度fork()vfork()地址空间写时复制父子进程独立完全共享父进程地址空间执行顺序由调度器决定不确定子进程优先执行父进程挂起数据修改修改数据触发写时复制不影响父进程修改数据直接改变父进程内存易引发问题适用场景通用进程创建场景子进程创建后立即调用exec加载新程序避免数据冲突六、总结1. 核心概念图谱进程 代码段 数据段 PCBtask_struct ↓ ↓ ↓ 只读共享 写时复制 存储进程属性PID/PPID/状态等进程 vs 程序程序是静态的指令集合如.out文件进程是动态的执行过程有生命周期。OS 管理进程的核心通过遍历 PCB 链表实现进程的调度、资源分配和状态管理。3. 编程实战要点创建多子进程时子进程需及时exit()避免创建“孙子进程”。父进程必须回收子进程资源防止僵尸进程。区分相对路径和绝对路径的使用场景与cwd相关。七、练习一基础概念进程概念回顾什么是进程进程和程序的本质区别是什么OS管理进程的核心数据结构是什么以Linux为例进程属性基础Linux中进程的PID、PPID分别代表什么如何在终端查看一个进程的PID和PPID子进程基础什么是子进程子进程和父进程的关系是什么父进程退出后子进程会变成什么进程fork函数基础Linux中创建子进程的核心系统调用函数是什么这个函数的最特殊的特点是什么返回值层面二进阶题fork函数返回值调用fork()后为什么会有两个返回值父进程和子进程分别拿到的返回值是什么如果fork()调用失败返回值是什么多进程执行逻辑创建多进程时多个子进程的执行顺序是由什么决定的OS的调度器在其中起到了什么作用系统接口关联除了fork()Linux中还有哪些创建进程的相关系统调用比如vfork()、exec系列函数fork()和vfork()的核心区别是什么进程退出父进程如何等待子进程退出如果父进程不等待子进程会产生什么问题三编程题基础题编写一个C/C程序使用fork()创建一个子进程父进程打印自身PID和子进程PID子进程打印自身PID和父进程PID。思考题尝试在代码中验证“子进程复制父进程地址空间”在fork()前定义一个全局变量i0父进程将i改为10子进程打印i的值观察结果并解释原因。进阶题编写一个C/C程序创建3个子进程每个子进程打印自己的PID和“我是第X个子进程”父进程等待所有子进程退出后打印“所有子进程已退出”。Doro又又又带着小花来啦超级奖励给坚持看到这里的你能沉下心把Linux进程这部分核心知识啃完你真的超棒的 如果你觉得这篇博客把晦涩的进程概念讲得清晰易懂帮你理解了了fork创建子进程、进程回收这些知识点的别忘了动动小手点个【点赞】和【收藏】呀这样后续复习进程相关知识点时就能快速找到这份干货满满的笔记啦赶紧和Doro一起关注这个博主吧他悄悄的告诉了Doro说他后续会持续更新Linux系统编程、进程通信、线程等系列干货内容的把复杂的技术点拆解得明明白白一步步夯实编程基础 另外文中练习题的详细答案已经放在评论区咯如果做练习时遇到困惑或者对进程知识点有任何疑问、想法都欢迎在评论区留言讨论Doro会吧每一个回复都告诉博主的和大家一起交流学习 我们下期干货再见
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

做外国的网站卖东西内网网站建设流程

作为一名B站内容创作者,你是否曾为视频备份、教程收藏、番剧离线观看而烦恼?BiliTools跨平台哔哩哔哩工具箱正是为你量身打造的解决方案。这个基于Tauri构建的工具箱不仅能下载视频,更提供全方位的资源管理能力,让你的创作之路更加…

张小明 2026/1/17 2:18:09 网站建设

速拓科技是做网站用自己的话回答网络营销是什么

在当今游戏直播蓬勃发展的时代,如何让观众与主播之间建立更深层次的互动连接?DG-Lab郊狼游戏控制器应运而生,这款专为游戏直播设计的智能体验系统,通过实时数据交互技术,让观众能够直接影响主播的游戏体验,…

张小明 2026/1/17 1:14:14 网站建设

做网站 怎么备案手机百度高级搜索入口在哪里

CAAP2008X故障录波分析软件终极指南 - 电力系统工程师必备工具 【免费下载链接】故障录波分析软件caap2008X 本仓库提供了一个功能强大的故障录波分析软件——caap2008X。该软件专为读取和分析COMTRADE格式的故障录波数据而设计,具有操作简便、功能全面的特点。无需…

张小明 2026/1/19 19:18:30 网站建设

哪个网站做ppt模板赚钱做网站怎么接业务

辉芒微电子8位微控制器芯片,凭借领先的技术实力、卓越的产品性能以及扎实的市场表现,成功入选深圳市工业和信息化局“深圳市制造业单项冠军企业”认定。何为“制造业单项冠军”?深圳市制造业单项冠军企业,特指那些长期专注于制造业…

张小明 2026/1/17 6:20:54 网站建设

外贸网站做排名网络培训心得

TensorFlow 深度解析:为何它仍是企业级 AI 落地的首选框架? 在金融风控系统每秒处理上万笔交易、医疗影像平台实时分析 CT 扫描、智能制造产线毫秒级缺陷检测的背后,一个名字始终高频出现——TensorFlow。尽管近年来 PyTorch 在论文发表中风头…

张小明 2026/1/17 5:28:10 网站建设