『APUE自学笔记』进程控制

VLOOKUP_fixed.py 立即下载

三个特殊进程

  • PID==0(调度进程)

作用:实现进程间的调度和切换,该进程会让CPU轮换的执行所有的进程。
OS启动起来后,最后有一部分代码会持续的运行,这个就是调度的进程。由于这个进程是OS的一部分,凡是由OS代码演变来的进程,都称之为系统进程。

  • PID==1(init进程)

作用1:初始化。他会去读取各种各样的系统文件,使用文件中的数据来初始化OS的启动。
作用2:托管孤儿进程。
作用3:作为所有进程的原始父进程。
这个进程的代码不属于OS的代码,这个进程是一个独立的程序,程序代码放在了/sbin/init下,当OS启动起来后,OS会去执行init程序,将它的代码加载到内存,使其运行起来。

  • PID==1(页守护进程)

作用:专门负责虚拟内存的页操作。
与调度进程一样,也是一个系统进程,代码属于OS的一部分。

程序如何运行起来的

1° 在内存中划出一片内存空间
2° 将硬盘上可执行文件中的代码(机器指令)拷贝到划出的内存空间中
3° pc指向第一条指令,cpu取指运行
以上三步Linux通过系统调用实现。

fork:开辟出一块内存空间
exec:将程序代码(机器指令)拷贝到开辟的内存空间中,并让pc指向第一条指令,CPU开始执行,进程就运行起来了。

fork后,子进程拥有的独立属性(不会从父进程继承的属性)

  1. 进程ID。
  2. 不同的父进程ID。
  3. 父进程设置的锁,子进程不能被继承。
  4. ……

exec加载器

将新程序代码(编译后的机器指令)加载到子进程的内存空间,替换掉原有的与父进程相同的代码和数据,让子进程空间运行全新的程序。

关于exec函数族:

exec的函数有很多个,它们分别是execve、execl、execv、execle、execlp、execvp,都是加载函数。其中execve是系统函数,其余的都是基于execve封装得到的库函数。

exec可以执行java程序吗?

java属于解释性语言,它所写的程序被编译后只是字节码,并不是能被CPU直接执行的机器指令,所以不能被execve直接加载执行,而是被虚拟机解释执行。execve需要先加载运行java虚拟机程序,然后再由虚拟机程序去将字节码解释为机器指令,再由cpu去执行。

wait()

原理:

(1)父进程调用wait等子进程结束,如果子进程没有结束的话,父进程调用wait时会一直休眠的等。
(2)子进程将退出状态返回给内核,内核构建“进程终止状态”。
(3)内核向父进程发送SIGCHLD信号,通知父进程子进程结束了。如果父进程没有调用wait,会忽略这个信号,表示不关心子进程的终止状态。如果父进程正在调用wait时,子进程终止,则wait会被SIGCHLD信号唤醒,并获取进“进程终止状态”。

wait的缺点:

如果父进程fork创建出了好多子进程,wait只能获取最先终止的那个子进程的“终止”状态,其它的将无法获取,如果想获取所有子进程终止状态,或者只想获取指定子进程的进程终止状态,需要使用wait的兄弟函数waitpid,

编译型语言与解释型语言启动方式的区别

(1)运行编译型语言的程序

1° 父进程(命令行终端、图形界面)会fork复制出子进程空间
2° 调用exec加载器,直接将编译后代码拷贝到子进程空间然后被CPU执行时,整个程序就运行起来了。

(2)运行解释型语言的程序

1° 父进程(命令行窗口、图形界面)会fork复制出子进程空间
2° 调用exec加载java虚拟机程序,将虚拟机程序的代码拷贝到子进程空间中。
3° 当java虚拟机程序运行起来后,会自动的去解释编译得到的java字节码文件,将字节码翻译为机器指令,cpu再去执行翻译得到的机器指令。每解释一句,cpu就会执行一句,在虚拟机的翻译下,整个java进程就开始运行起来了。(JVM与Java进程的关系是1对1的,每启动一个Java进程都需要先运行一个JVM)

思考:虚拟机程序是什么语言写的?

虚拟机程序能够被exec直接加载运行,说明虚拟机必然是编译型语言写的,如果虚拟机使用解释性语言来写的话,编译后得到是字节码,字节码不是机器指令,此时还要另外安装一个程序来解释虚拟机程序,这就陷入了鸡生蛋蛋生鸡的问题。所以java虚拟机必须使用编译型语言来写,即C/C++。

D打卡签到,蓝牙中继,广播信号模拟器 模拟WIFI或蓝牙,有如下4种运行模式 1、WIFI模式:指定SSID、BSSID名称等,模拟WIFI,供设备连接。 2、蓝牙静态模式:指定MAC地址,广播固定的RAW数据。 3、蓝牙动态主机模式:扫描周围蓝牙设备,获取指定MAC地址的蓝牙及其RAW数据,实时发送至Cloud云端,可以设定时间段,只在设定的时间段内发送。 4、蓝牙动态从机模式:指定MAC地址,从Cloud云端获取动态主机模式实时上传的该MAC地址的RAW数据,并广播RAW数据。 准备工作: 1、板子:选择ESP32C3或ESP32C3 Supermini 2、nRF Connect手机app:用于扫描获取待模拟蓝牙设备的MAC和RAW数据。 Wifi分析仪或WiFi魔盒手机APP:用于扫描获取待模拟WIFI设备的SSID和BSSID。 3、可使用官方flash_download_tool_3.9.11工具来固件烧录。 使用说明: 上述完成后,设备首次上电,RESET一侧的指示灯会常亮,可以把它理解成电源指示灯; BOOT一侧的灯会亮,该灯常亮,表示设备开启了AP模式,此时设备会发射一个WIFI信号源,名称为ESPWIFI_AP,密码为12345678,手机或电脑连接该WIFI,浏览器输入192.168.4.1,进入设备的配置页面,进行相应的配置,其中动态主机模式和动态从机模式的SSID、Pwd 及要模拟的蓝牙MAC地址。配置完成并保存后,会重启,重启后设备会按照保存的配置运行。若下次要修改设备配置,可以长按BOOT按键,等待BOOT一侧的灯常亮,即进入AP模式,再按照上述流程配置即可。 仅用于蓝牙设备的开发与调试,请勿用于签到等违法违纪用途。 立即下载

相关推荐

YOLO26算法心电图十二导联目标检测+训练好的模型+368张数据集+pyqt可视化界面.zip

附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[导联I(I), 导联II(II), 导联III(III), 胸导联V1(V1), 胸导联V2(V2), 胸导联V3(V3), 胸导联V4(V4), 胸导联V5(V5), 胸导联V6(V6), 加压肢体导联aVF(aVF), 加压肢体导联aVL(aVL), 加压肢体导联aVR(aVR)] · 训练集:313 张 · 验证集:37 张 · 测试集:18 张 · 总计:368 张 该数据集聚焦于临床心电图信号的精准识别与定位,其核心检测目标为标准12导联心电图中的各个独立导联波形区域,涵盖肢体导联(I、II、III)与加压肢体导联(aVR、aVL、aVF),以及胸前导联(V1至V6),适用于心电图自动分析系统中对各导联位置的快速准确标注与分类。数据采集场景真实还原了医院心电图室或急诊监护环境下的标准心电图记录纸,波形清晰、基线稳定,具有高度临床参考价值。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 57 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9708** mAP50-95 | 0.6344 Precision | 0.8990 Recall | 0.9191 train/box_loss | 1.2231 train/cls_loss | 0.9703 val/box_loss | 1.2779 val/cls_loss | 0.... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。

『APUE自学笔记』线程

进程的缺点 (1)进程间切换的计算机资源开销很大,切换效率非常低 OS是通过虚拟内存机制来实现进程空间独立的,进程在并发运行时需要相互间的切换,切换时必然涉及虚拟内存机制的控制,但是虚拟内存机制比较复杂,所以在进行进程间切换时,会耗费CPU、cache、内存等计算机资源,也非常耗费切换时间。 (2)进程间数据共享的开销很大 当程序涉及多进程时,往往会涉及到进程间的通信,OS提供了各种各样的通...

Replus_的博客 326

企业级AI助手平台 开箱即用的全栈AI平台,支持多智能体协同、Supervisor模式编排、多种决策模式、RAG技术和流程编排能力 支持多厂商大模型统一接入与管理,安全可控的企业知识库与高精度检索优化

企业级AI应用开发框架,支持多厂商大模型统一接入与管理,安全可控的企业知识库与高精度检索优化能力,提供可视化流程编排、自主决策智能体与多智能体协同调度,兼容主流 Agent Skill 协议,帮助企业与开发者零门槛快速构建安全、高效、可落地的AI智能体应用与行业解决方案。

探索Apue:一款深入理解UNIX/Linux编程的开源项目

探索Apue:一款深入理解UNIX/Linux编程的开源项目 是一个基于Andrew Tannenbaum教授的《Advanced Programming in the UNIX Environment》(APUE)书籍的开源实现项目。这个项目旨在为学习和理解UNIX/Linux系统级编程的开发者提供实际的代码示例和练习,帮助他们深入掌握这一领域的知识。 技术分析 Apue的核心是C语言编写的各种...

gitblog_00081的博客 486

基于动态窗口法DWA的机器人路径规划研究(Matlab代码实现)

内容概要:本文系统研究了基于动态窗口法(DWA)的机器人局部路径规划算法,深入剖析其在动态环境中实现自主避障与实时轨迹优化的核心机制。文章详细阐述了DWA算法的速度空间采样策略、轨迹预测模型、动力学约束处理及多目标代价函数的设计原理,并通过构建完整的Matlab仿真框架验证算法有效性。结合典型场景的仿真实验,展示了机器人在复杂障碍物环境下如何实时生成安全、平滑且符合运动学约束的最优路径,充分体现了DWA在移动机器人导航中的实用性与鲁棒性。; 适合人群:具备机器人运动规划基础知识和Matlab编程能力,从事智能移动机器人、自动驾驶或服务机器人研发的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解DWA算法的理论基础与实现细节;②掌握机器人局部路径规划的仿真实现方法;③为实际机器人系统的导航模块开发提供可复用的算法原型与代码参考;④作为进一步研究高级导航算法(如TEB、MPC)的技术基础。; 阅读建议:建议结合提供的Matlab代码逐模块分析与调试,重点关注速度采样、轨迹积分、障碍物距离计算及代价评估等关键环节,通过调整参数在不同地图环境中进行对比实验,以深刻把握算法性能与参数之间的关系,进而提升对实时路径规划系统设计的理解与应用能力。

【轴承故障诊断】用于轴承故障诊断的集中时频分析研究(Matlab代码实现)

内容概要:本文系统研究了用于轴承故障诊断的集中时频分析技术,重点解决了传统时频分析方法在处理非平稳信号时存在的能量分散与分辨率不足等问题。通过引入集中时频分析方法,能够有效聚焦信号能量,精确提取轴承故障特征频率,提升故障识别的准确性与时效性。文章详细阐述了该方法的理论基础,并结合仿真信号与实际实验数据验证其优越性能,同时提供了完整的Matlab代码实现流程,涵盖信号预处理、时频变换、参数优化及结果可视化等环节,便于读者复现与拓展应用。; 适合人群:具备一定信号处理理论基础和Matlab编程能力的研究生、科研人员,以及从事机械设备状态监测、故障诊断与预测性维护工作的工程技术人员。; 使用场景及目标:①应用于电机、风机、齿轮箱等旋转机械的早期轴承故障检测,实现故障预警;②提升工业设备运维系统的智能化水平,支撑预测性维护体系构建;③作为高校或研究机构在信号处理、机械故障诊断等课程中的教学案例与实践素材。; 阅读建议:建议读者结合文中提供的Matlab代码逐段运行与调试,深入理解集中时频分布的生成机制及其关键参数(如核函数选择、平滑窗口大小)对诊断效果的影响,并尝试将其应用于其他类型的机械故障信号分析中,开展对比研究以深化对该方法适用性的认识。

计算机导论第二张思维导图,看书的一点小建议

大家好,我是乔戈里。之前在知乎上回答了这个问题,获得了近千点赞,还有读者说一看就是有生活的人:噗,的确,我自己以前看书的时候也有这些困惑。再到后来有自己的看书方法和节奏,我觉得适合自己的方法就是最好的。再说回这个问题本身,其实不用看就知道,这种问题下的观点一般都是两类:没必要!直接做项目有必要,经典的书必须啃甚至还有这种反智言论:只想说就算 Linus 这种级别的巨佬, 自学操作系统的时候,也是从...

weixin_39555415的博客 868

从三个角度理解知识图谱

2012年谷歌首次提出“知识图谱”这个词,由此知识图谱在工业界也出现得越来越多,对于知识图谱以及相关概念的理解确实也是比较绕。自己在研究大数据独角兽Palantir之后开始接触知识图谱,也算对其有了一定了解,这里从三个角度总结一下怎么去理解知识图谱。 几个基本概念:本体、实体、知识库、知识图谱 1、本体是概念的集合,是大家都公认的概念框架,一般不会改变如“人”、“事”、“物”、 “地”、“组...

JavaChaoCo的博客 6901

Pytest框架中的测试用例执行方式!

深入理解和熟练掌握pytest测试用例的执行策略及命令行选项,是提高测试质量、加速迭代周期、维护项目稳定的关键步骤。无论是通过命令行终端高效地批量执行测试,还是在IDE环境中无缝结合代码编辑与调试功能,pytest都能够凭借其强大的灵活性与功能性,满足各种规模项目的多样化测试需求。此外,进一步研究pytest的各种插件与扩展功能,将有助于更好地适应不同项目背景下的具体测试挑战。下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

1420

保姆级教程:用OSSH免费版+FreeRADIUS+FreeAC NAC,从零搭建一套企业级无线Portal认证系统

本文提供了一套基于OSSH免费版、FreeRADIUS和FreeAC NAC的企业级无线Portal认证系统搭建教程。从环境规划、核心组件安装到认证策略与用户管理,详细介绍了如何利用开源工具构建高效、安全的认证体系,特别适用于预算有限但需求严格的企业场景。

weixin_27032989的博客 392

深入解析Carry4的内部结构与工作原理

本文深入解析了Xilinx/AMD FPGA中的核心硬件资源Carry4的内部结构和工作原理。作为实现超前进位的关键物理电路,Carry4通过其CI、DI、S、O、CO等端口,高效处理4位算术运算的进位逻辑。文章通过端口详解、结构分析和实战计算示例,揭示了其如何加速加法、减法等运算,并探讨了其在优化FPGA设计时序与资源利用中的关键作用。

n4o5p6q7r的博客 501

掌握Linux编程的10个步骤

掌握Linux编程的10个步骤 转载 做linux c语言开发有一小阵子了,在这边自己总结了些心得,相信能让不懂得Linux编程的人慢慢步入Linux殿堂。有任何不对或不准确之处欢迎讨论。 1. 安装 linux 操作系统 既然要学习linux下的c语言开发,那么安装个linux操作系统是必须的。建议安装Ubuntu,这是我目前见过界面最友好的linux操作系统了。关于如何使用Ubunt...

weixin_33878457的博客 98

手把手教你用三极管搭建麦克风音频放大电路(附完整电路图)

本文详细介绍了如何使用三极管搭建麦克风音频放大电路,包括电路设计基础、元件选择、完整电路图及分步焊接指南。通过实际操作和调试技巧,帮助电子爱好者和学生深入理解模拟电路原理,实现音质清晰的音频放大效果。

Black的专栏 983

C语言精通之路:四本经典书籍构建从语法到系统的完整能力体系

C语言作为系统编程和底层开发的核心,其学习深度远不止于基础语法。理解指针、内存管理、编译链接过程以及与操作系统的交互,是区分初学者与专家的关键。这些核心概念构成了计算机系统的基础原理,其技术价值在于能够培养开发者对程序执行、资源分配和硬件交互的深刻洞察力,从而编写出高效、健壮的系统级软件。掌握这些能力后,可广泛应用于操作系统、嵌入式系统、高性能服务器及中间件等场景。本文聚焦于通过精读《C程序设计语言》、《C Primer Plus》、《UNIX环境高级编程》及《C陷阱与缺陷》与《C专家编程》这四本经典著作,

weixin_30652897的博客 341

从AMCL到SLAM Toolbox:在Nav2中实现高精度纯定位的实践指南

本文详细介绍了从AMCL迁移到SLAM Toolbox纯定位模式的实践指南,帮助开发者在Nav2中实现高精度定位。通过对比AMCL与SLAM Toolbox的性能差异,提供环境配置、参数调优、Nav2集成等关键步骤,显著提升机器人在动态环境中的定位精度和重定位效率。

weixin_29292535的博客 148

SSE(Server-Sent Events)完整使用示例

本篇使用Node.js 作为服务端,在浏览器客户端演示SSE的完整实例和演示。实现了一个基于 Server-Sent Events (SSE) 的实时数据推送功能。

oscar999的专栏 750

看书的一点小建议

大家好,我是厂长。之前给大家推荐过一些比较经典的专业书【计算机专业必备的几本算法书!】,然后经常有读者过来问如何才能提高看书的效率。今天恰好看到朋友小北写了一篇很不错的文章,聊的就是这个话...

tanqingbo的博客 205

MT4/MT5 第三代移动平均线(MetaTrader 指标)

第三代移动平均线(3G-MA)是传统MA指标的升级版本,通过"时滞压缩"算法将信号滞后降至理论极限(λ=2)。该指标在保留平滑性的同时,信号速度比EMA快1.5-2.3倍,适用于MT4/MT5平台。核心参数包括计算周期(默认34)、滞后压缩系数(2-10)和应用价位选择,支持斜率变色功能。安装简单,无需外部依赖,通过多周期共振可提升12-18%胜率。指标代码包含完整的MT4/MT5实现方案,采用双缓冲计算结构,通过相位前移算法抵消群延迟。风险提示:需配合其他技术指标和严格风控(≤2%账户

JanLEE 579

Python3 实现 > 远程桌面访问退出后被访问电脑显示屏自动切换回本地桌面

公司大堂有一块LED显示屏长期播放宣传内容,播放用的电脑放置在附近弱电间内,每次更改内容都需要跑去弱电间,实在不方便。正好播放电脑已连接至公司内网,就想使用Windows自带的远程桌面来远程更换宣传内容。 遗憾的是远程桌面访问时,显示屏将切换成登录界面,退出远程桌面后,登录界面无法自动切换回桌面,远程更换宣传内容算是失败了。、 失败了?怎么可能? 经过网上查找资料,加上几天的研究还是想到了解决办法,加上自己自学了Python,就用Python写了个小程序,现分享给有需要的朋友

ajin945的专栏 1384

从数据读取到业务事件:理解 ABAP CDS 视图的目的与选型(含 RAP、扩展与分析场景)

CDS视图在SAP S/4HANA中不仅是数据查询工具,更是语义模型和运行时能力的载体。它通过分层架构(基础视图、组合视图、消费视图等)实现数据复用与场景适配,支持UI、分析、事务处理等多样化消费。视图类型包括提供数据访问的接口视图(I_前缀)、消费视图(C_前缀)和事务视图,以及不提供数据访问的扩展视图。这种分层设计确保了数据模型的稳定性与扩展性,同时支持自定义字段和上下文感知分析。正确理解CDS视图的用途和分层规则,能帮助开发者构建更健壮、可维护的SAP应用。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 302

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

学习 C/C++ 到底应该看哪些书或者视频?

Hello,大家好,我是 Eg。初学 C/C++,不知道该看哪些书籍?学长说郝斌的视频好,学姐又说谭浩强的书好,大学老师却说把教材中的内容吃透就行。那到底谁说的是真的呢?今天我就以一个过来人的经验告诉你,不管是学长说的,学姐说的,还是大学老师说的,通通和他们说 NO!先来说说为什么要拒绝学长学姐和大学老师的推荐。 不管是学长还是学姐,他们都是没有实战经验,到了企业,用到的知识完全不止他们口中的那点...

Eglinux 823

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

六年之痒--与编程爱好者共勉

这是我六年军校生活最要好的一个朋友昨天写的。这六年来我和这位朋友都是一直在摸着石头过河,没有任何人指点,也走了N多弯路,看了N多的垃圾书。只不过我所学比他杂的多,也浮躁得多,到现在也没有哪一门技术敢自称精通。本科的时候抱怨管理太严,环境太差;上了研之后环境改善了很多,但又总是很难静下心来好好学一些的东西。比如对Unix/Linux系统比较感兴趣,想把Stevens的APUE和UNP认认真真的学一遍

curse的天空 1275

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: 『APUE自学笔记』进程环境
下一篇: 『APUE自学笔记』线程
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值