制作动画的网站模板标签式网站内容管理

张小明 2026/3/2 21:44:31
制作动画的网站模板,标签式网站内容管理,企业自助建站系统下载,阿联酋网站后缀Linux进程核心概念与编程实战#xff1a;fork/getpid全解析 进程是Linux系统编程的核心基石#xff0c;是操作系统资源分配和调度的基本单位。本文结合实战代码#xff0c;从核心概念#xff08;PCB、虚拟内存、进程调度#xff09;到编程实现#xff08;fork/getpid/get…Linux进程核心概念与编程实战fork/getpid全解析进程是Linux系统编程的核心基石是操作系统资源分配和调度的基本单位。本文结合实战代码从核心概念PCB、虚拟内存、进程调度到编程实现fork/getpid/getppid完整讲解Linux进程的本质、特性及实操方法。一、进程核心概念1.1 进程与PCB进程控制块进程定义进程是程序的一次执行过程操作系统会为其分配内存、CPU等资源是动态的、有生命周期的创建→调度→消亡。PCBProcess Control Block操作系统用于描述进程的核心结构体存储进程的所有关键信息Linux中部分核心字段包括PID进程唯一标识符如1234当前工作路径可通过chdir修改umask文件创建默认权限掩码如0002进程打开的文件描述符列表关联文件IO信号相关配置处理异步事件用户ID/组ID权限控制资源限制如最大打开文件数1024、栈大小8M。1.2 进程与程序的核心区别程序是静态的进程是动态的二者的核心差异可总结为特性程序进程状态静态硬盘上的代码/数据集合动态程序执行的全过程生命周期永存除非删除文件暂时创建→运行→消亡状态变化无有就绪/运行/阻塞等并发能力无支持并发执行资源占用不占用系统资源占用CPU、内存、文件描述符等关联关系一个程序可对应多个进程一个进程可加载运行多个程序示例.c源文件编译为a.out程序静态执行./a.out后生成一个带PID的进程动态多次执行./a.out会生成多个独立进程。1.3 虚拟内存与进程隔离Linux通过虚拟内存实现进程间的内存隔离核心特性隔离性进程A无法直接访问进程B的内存空间如A的全局变量无法被B修改避免进程间相互干扰安全性进程需通过权限控制访问内核空间不能随意操作系统核心资源独立性每个进程都有自己的虚拟地址空间03G用户态34G内核态即使物理内存不足也可通过交换分区模拟。1.4 进程的分类Linux进程按运行特性可分为三类交互式进程依赖用户输入触发输出如终端执行python进入交互模式、图形界面应用批处理进程无需交互批量执行命令如Shell脚本、定时任务守护进程后台自动运行休眠等待触发条件如系统更新进程、杀毒软件、sshd。1.5 进程的核心作用并发并发是操作系统通过进程调度实现的核心能力宏观并行在一个时间段内多个进程看似“同时运行”微观串行CPU同一时刻只能运行一个进程操作系统通过快速切换进程实现“并发”效果。二、进程调度与上下文切换2.1 进程调度的本质Linux系统中进程数量远多于CPU核心数调度的核心目标是“公平且高效地分配CPU时间”决定“下一时刻哪个进程占用CPU”。2.2 常见调度算法时间片轮转每个进程分配固定时间片如10ms时间片耗尽后切换到下一个进程短任务优先优先调度运行时间短的进程减少整体等待时间进程优先级高优先级进程优先获得CPU如内核进程优先级高于普通进程完全公平调度CFSLinux默认调度算法按进程占用CPU的“权重”分配时间保证公平性。2.3 进程上下文切换当进程A的时间片耗尽需切换到进程B运行时操作系统会执行“上下文切换”保存进程A的状态将PCB、CPU寄存器、程序计数器PC、内存数据等缓存到硬盘/内存释放CPU资源进程A进入“就绪态”加载进程B的状态从缓存中读取进程B的PCB、寄存器等数据到内存进程B占用CPU进入“运行态”。上下文切换有一定开销过度切换会降低系统整体性能。三、Linux进程常用命令命令功能说明ps aux显示系统所有进程的详细信息PID、CPU占用、内存占用、运行状态等top实时监控进程Linux版“任务管理器”可查看CPU/内存使用率、进程优先级等kill PID向指定PID的进程发送信号默认SIGTERM优雅终止kill -9 PID强制终止指定PID的进程SIGKILL无法被进程捕获强制退出killall -9 程序名强制终止所有同名程序的进程如killall -9 a.out示例# 查看所有进程psaux|grepa.out# 实时监控进程top# 强制终止PID为1234的进程kill-91234四、进程编程核心函数实战Linux C编程中fork()是创建进程的核心函数getpid()/getppid()用于获取进程ID下面结合代码逐一解析。4.1 基础循环进程1.c常驻进程示例该代码实现一个无限循环的常驻进程用于模拟后台运行的进程如守护进程#includestdio.h#includeunistd.hintmain(){// 无限循环每秒打印分隔符while(1){printf(-------------------\n);sleep(1);// 休眠1秒减少CPU占用}return0;}编译运行gcc1.c -o1.out ./1.out# 终止进程新开终端psaux|grep1.out# 找到PIDkill-9PID4.2 fork()创建子进程02fork.cfork()是创建子进程的核心函数一次调用两次返回父进程中返回子进程的PID0子进程中返回0失败返回-1。代码解析#includestdio.h#includestdlib.h#includestring.h#includesys/types.h#includeunistd.hintmain(){// 创建子进程pid_tretfork();// 父进程ret 0if(ret0){while(1){printf(发视频...\n);sleep(1);// 每秒打印模拟父进程任务}}// 子进程ret 0elseif(0ret){while(1){printf(接收控制....\n);sleep(1);// 每秒打印模拟子进程任务}}// fork失败ret 0else{perror(fork);// 打印错误原因return1;}return0;}核心特性父子进程独立运行执行顺序由操作系统调度不确定谁先运行父子进程共享代码段但数据段独立后续示例验证编译运行后会同时打印“发视频…”和“接收控制…”体现进程并发。4.3 父子进程变量隔离03fork_var.c该代码验证“父子进程变量不共享”——子进程修改全局变量父进程不受影响#includestdio.h#includestdlib.h#includestring.h#includesys/types.h#includeunistd.hinta20;// 全局变量intmain(){pid_tretfork();// 父进程休眠3秒等待子进程执行完毕if(ret0){sleep(3);printf(father a %d\n,a);// 输出20未被修改}// 子进程修改全局变量aelseif(0ret){a10;// a变为30printf(child a is %d\n,a);// 输出30}// fork失败else{perror(fork);return1;}printf(a is %d\n,a);// 父进程输出20子进程输出30return0;}运行结果child a is 30 a is 30 father a 20 a is 20核心结论fork创建的子进程是父进程的“完全拷贝”但父子进程的变量独立写时拷贝子进程修改变量不会影响父进程。4.4 getpid()/getppid()获取进程ID04getpid.cgetpid()获取当前进程的PIDgetppid()获取当前进程的父进程PID。代码解析注原代码存在小问题已修正#includestdio.h#includestdlib.h#includestring.h#includesys/types.h#includeunistd.hintmain(){inti3;// 循环3次pid_tretfork();// 父进程ret 0if(ret0){while(i--){// 循环3次// 打印父进程PID和父进程的父进程PID终端进程printf(发视频...pid:%d ppid:%d\n,getpid(),getppid());sleep(1);}}// 子进程补充原代码缺失的分支elseif(ret0){printf(子进程 pid:%d ppid:%d\n,getpid(),getppid());// 子进程的父进程是上面的父进程}// fork失败else{perror(fork);return1;}// 父子进程都会执行printf(pid :%d ppid:%d\n,getpid(),getppid());return0;}运行结果示例发视频...pid:1234 ppid:987 子进程 pid:1235 ppid:1234 发视频...pid:1234 ppid:987 发视频...pid:1234 ppid:987 pid :1235 ppid:1234 pid :1234 ppid:987核心结论子进程的ppid等于父进程的pid父进程的ppid通常是终端进程的PID执行程序的终端。五、常见问题与避坑点5.1 fork()返回值判断必须严格判断ret 0父进程、ret 0子进程、ret 0失败遗漏分支会导致逻辑异常。5.2 父子进程执行顺序父子进程的执行顺序由操作系统调度决定不可依赖“父进程先执行”或“子进程先执行”需通过sleep()/信号/管道等方式同步。5.3 变量共享误区fork创建的子进程并非共享父进程变量而是“写时拷贝”——读取时共享写入时拷贝因此子进程修改变量不会影响父进程。5.4 僵尸进程若父进程未回收子进程的退出状态子进程退出后会变成“僵尸进程”占用PID资源需通过wait()/waitpid()回收后续进阶内容。六、核心总结6.1 关键知识点进程是动态的执行过程PCB是进程的“身份证”存储所有核心信息fork()是创建进程的核心函数一次调用两次返回父子进程独立运行、变量隔离getpid()/getppid()用于获取进程ID是调试进程关系的核心工具进程并发是宏观并行、微观串行依赖操作系统的调度和上下文切换。6.2 编程要点严格处理fork()的返回值避免逻辑漏洞理解父子进程的变量隔离特性不要试图通过全局变量共享数据常驻进程需通过sleep()降低CPU占用避免系统资源浪费终止进程优先用kill优雅退出仅在必要时用kill -9强制终止。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

温州网站建设哪家专业无锡建设管理服务中心

在规则链中有send notification动作节点 当我们添加该节点时,无法选择模板 参见官网可见,这儿要求的是规则链生命周期事件类模板 Rule engine lifecycle event The rule engine lifecycle event template is used to send notification about rule chain…

张小明 2026/1/10 17:29:06 网站建设

网站域名证书查询建设北京公司网站

文件管理全攻略:删除、移动、复制与恢复 一、文件删除与回收站处理 1.1 清空回收站 当你确定回收站中的文件夹和文件再也不会用到时,可以清空回收站来释放磁盘空间。操作方法如下: - 方法一 :在资源管理器栏的“回收站任务”下,点击“清空回收站”。 - 方法二 :…

张小明 2026/1/10 16:02:03 网站建设

网站代码隐蔽代码信息网站的建设

在嵌入式智能领域,从人类演示中学习机器人操作是主流范式,但人类手部与不同形态机器人手(如2指、3指、5指)之间的形态差异鸿沟,成为技术落地的核心障碍: 基于动作重定向的方法仅映射运动学姿态,…

张小明 2026/1/10 9:26:28 网站建设

电脑网站建设规划合肥做网页的网络公司

小爱音箱智能升级指南:打造专属AI语音助手的神奇体验 【免费下载链接】mi-gpt 🏠 将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手。 项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt 还在为小爱音箱的简单问答功能感…

张小明 2026/1/10 16:35:37 网站建设

工商营业执照注册网站网络推广需要多少钱

目前Google Play 可以支持大陆开发者。也支持国内的手机号码。 https://play.google.com/console/ 通过以上链接进行登录和注册(需要科学上网,避免被骗)。 里面有个问题需要解决的是需要有个国际信用卡,要支付25$. 需要个人认…

张小明 2026/1/10 16:07:08 网站建设

无锡网站seo郑州关键词网站优化排名

还在被ThinkPad笔记本的"飞机起飞"般的风扇噪音困扰吗?无论是深夜加班时的持续嗡鸣,还是重要会议中的突然加速,这些噪音问题都会严重影响工作效率和使用体验。TPFanCtrl2作为专为Windows 10/11设计的智能风扇控制工具,通…

张小明 2026/1/12 5:21:18 网站建设