Linux
文章平均质量分 86
Howrun777
母语C++,熟悉Python,轻松驾驭Linux,顶级后端工程师,精通虚幻引擎,天才游戏游戏策划
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux进程组 会话
cmd2) &”,组成单个后台进程组;1. 定义:多个进程的集合,有唯一PGID,通常等于组长进程PID,组长结束不影响组存在,直到最后一个进程终止。2. 核心作用:批量管理进程,如终端关闭时统一发送信号;◦ 后台进程组通过“jobs”查看,用“kill %任务号”可终止整个组。◦ 管道命令按Ctrl+C时,进程组内所有进程同时终止,避免遗漏;◦ 前台进程组可接收终端输入和信号,后台则不能;◦ 管道符连接命令,自动组成前台进程组;◦ 一个进程同一时间仅属一个进程组;◦ 子进程默认继承父进程的进程组。原创 2026-03-23 02:58:29 · 42 阅读 · 0 评论 -
Linux_UDP聊天服务器
【代码】Linux_UDP聊天服务器。原创 2026-02-13 22:11:59 · 387 阅读 · 0 评论 -
C++ 知识点清单_Blog导航
三次握手(建立连接)、四次挥手(断开连接)、滑动窗口(流量控制)、拥塞控制(慢启动 / 拥塞避免 / 快重传 / 快恢复)、超时重传、粘包 / 拆包问题(解决方案:固定长度 / 分隔符 / 长度字段)。IPv4/IPv6、IP 地址分类(A/B/C 类)、子网划分(子网掩码)、路由协议(RIP/OSPF/BGP)、ARP(地址解析协议)、ICMP(互联网控制报文协议,ping/tracert)。先来先服务(FCFS)、短作业优先(SJF)、时间片轮转(RR)、优先级调度、多级反馈队列。原创 2026-01-26 07:16:51 · 700 阅读 · 0 评论 -
Makefile进阶案例_高手专用
Makefile采用三层结构实现自动化编译:源文件层(.cc)、中间产物层(.o)和最终目标层(可执行文件)。关键机制包括:1) 目标文件依赖源文件和头文件;2) 使用-MMD/MD选项自动生成依赖关系(.d文件);3) 通过-include动态加载依赖信息。这种"先编译后补票"的机制解决了传统Makefile需要手动维护头文件依赖的问题,当修改头文件时能自动触发重新编译。典型实现包含:定义编译器和标志、目标文件列表、通用编译规则以及依赖文件包含,既保证了编译正确性又提高了维护效率。原创 2026-01-26 01:46:26 · 1508 阅读 · 0 评论 -
Linux_C++_日志实例
Linux_C++_日志实例。原创 2026-01-22 14:04:56 · 173 阅读 · 0 评论 -
C++ 线程实战案例解析
这是 C++ 多线程最核心的安全机制。:真正的 SPSC 优化方案是不使用任何阻塞工具(锁或信号量),而是利用 std::atomic 配合 CPU 缓存一致性协议,实现真正的“零拷贝、零阻塞”。使用者不需要手动调用 sem_init 或 sem_destroy,这些都在 Semaphore 和 RingQueue 的构造函数和析构函数中自动完成。使用者不需要知道内部用的是 sem_wait 还是 pthread_mutex_lock,接口只有简单的 push 和 pop。这才是“不需要锁”的终极形态。原创 2026-01-22 14:02:56 · 951 阅读 · 0 评论 -
C++ 线程互斥锁 lock_guard
摘要:std::lock_guard是C++11提供的RAII风格互斥锁管理类,通过构造函数自动加锁、析构函数自动解锁,确保线程安全。它采用作用域控制锁的生命周期,具有轻量级、异常安全和不可拷贝的特性,能有效防止忘记解锁或异常导致的死锁问题。相比功能更复杂的unique_lock,lock_guard更适合简单的临界区保护场景。通过自动化的锁管理机制,开发者可以更安全高效地实现多线程编程。原创 2026-01-20 21:05:00 · 545 阅读 · 0 评论 -
C++标准线程库-全面讲解
本文全面介绍C++11到C++20的多线程编程特性,涵盖八大核心模块:线程管理(std::thread)、互斥锁(std::mutex家族)、线程同步(std::condition_variable)、异步编程(std::future)、原子操作(std::atomic)以及C++20新增特性(std::jthread、信号量、屏障)。重点解析了线程创建与管理、互斥锁类型选择、RAII锁包装器使用、条件变量等待/通知机制、异步任务处理等关键技术,并对比了不同锁的特性差异。原创 2026-01-18 18:26:04 · 870 阅读 · 2 评论 -
Linux---线程---全面讲解
Linux线程作为轻量级执行单元,在系统编程中扮演着关键角色。本文系统讲解了线程基础概念、核心API、同步机制和高级特性。重点内容包括:线程与进程的本质区别,Linux通过轻量级进程实现线程;pthread库的核心操作如创建、等待、终止和分离线程;多种同步机制(互斥锁、条件变量、读写锁等)的原理与使用场景;线程局部存储、线程安全等高级特性;以及死锁、线程泄漏等常见问题的解决方案。文章结合代码示例和底层实现细节,帮助开发者深入理解Linux线程的运行机制和最佳实践。原创 2026-01-12 03:11:33 · 1796 阅读 · 0 评论 -
Linux---线程_底层原理
Linux线程底层原理剖析:Linux采用轻量级进程(LWP)模型实现线程,所有线程共享同一进程资源但拥有独立task_struct。关键机制包括:1)通过clone()系统调用设置CLONE_VM等标志实现资源共享;2)1:1线程模型由NPTL库将用户线程映射为内核LWP;3)内存管理上共享堆而保持私有栈;4)采用Futex实现高效混合态同步锁。线程在内核调度中被视为独立执行实体,通过CFS算法公平调度。这种设计既保持了进程概念的简洁性,又提供了完整的线程功能。原创 2026-01-12 07:29:40 · 1093 阅读 · 0 评论 -
Linux进程间通信-超级合集
Linux进程间通信(IPC)机制主要包括四类:传统Unix IPC(管道、信号)、SystemV IPC(共享内存、消息队列、信号量)、POSIX IPC(改进版SystemV IPC)和套接字。管道分为匿名管道(父子进程间单向通信)和命名管道(任意进程间通信),前者轻量但局限,后者通过文件系统实现跨进程通信。SystemV IPC提供高性能内核对象,共享内存无数据拷贝最快但需同步,消息队列支持结构化数据传输,信号量用于进程同步。POSIX IPC接口更简洁,支持跨平台。套接字支持本地和网络通信,灵活但性原创 2026-01-08 01:49:11 · 770 阅读 · 0 评论 -
不可重入函数Non-Reentrant & 可重入函数Reentrant
摘要:可重入函数和不可重入函数的本质区别在于是否依赖外部状态。可重入函数像自动售货机,执行过程被打断后仍能正确运行,因为它只使用参数和局部变量(如memcpy、write)。不可重入函数像手工记账本,依赖全局状态(如strtok用静态变量保存分割位置),一旦在信号处理或多线程中被重入就会数据错乱。关键差异在于:可重入函数不使用全局变量、共享资源,只进行原子操作;不可重入函数则相反。在信号处理和多线程编程中必须使用可重入函数,避免调用printf、malloc等不可重入函数,否则会导致内存泄漏或程序崩溃。原创 2026-01-02 21:15:39 · 796 阅读 · 0 评论 -
Linux---内核态&用户态
摘要: 内核态与用户态的区分旨在实现权限隔离与系统安全。用户态(Ring3)限制程序仅能执行普通指令,访问自身用户空间;内核态(Ring0)允许特权指令和硬件操作,管理全局资源。切换通过系统调用、中断或异常触发,伴随CPU特权级变更和现场保护,开销较大。底层依赖CPU特权级(x86的Ring0/3)和虚拟地址空间划分(用户/内核空间独立映射)。用户级页表为进程私有,确保隔离;内核级页表全局共享,统一管控资源。优化策略包括减少系统调用、批量操作和TLB命中率提升,以降低切换开销。典型问题如段错误、内核崩溃等可原创 2026-01-02 20:03:56 · 935 阅读 · 0 评论 -
Linux进程通信---7---中断
Linux中断机制是操作系统处理硬件事件和程序异常的核心机制,分为硬中断(硬件触发)、软中断(内核触发)和异常(程序触发)三类。硬中断处理流程包括中断触发、CPU响应、现场保护、执行中断服务程序(上半部分快速处理)和触发延迟任务(下半部分耗时处理)。Linux采用"上下半机制"优化中断处理,上半部分在关中断状态下快速完成,下半部分通过软中断、Tasklet或工作队列在开中断状态下处理耗时任务。关键组件包括中断控制器、中断向量表和中断描述符,管理接口提供中断注册和释放功能。时钟中断作为周期原创 2026-01-02 18:46:40 · 980 阅读 · 0 评论 -
Linux进程通信---6---信号
场景 1:优雅退出进程捕获,不是直接退出,而是先:① 关闭打开的文件句柄;② 保存内存中的数据到磁盘;③ 释放网络连接;④ 再退出。实战:数据库服务、Web 服务(如 Nginx)收到SIGTERM时,会先停止接收新请求,处理完已有请求后再退出。场景 2:紧急备份进程捕获SIGINT(2)(Ctrl+C),执行 “紧急备份” 逻辑(比如把临时数据写入文件),再终止。场景 3:实时信号传少量数据用实时信号(SIGRTMINSIGRTMAX。原创 2026-01-02 16:11:19 · 1257 阅读 · 1 评论 -
Linux进程通信---6.1---进程信号屏蔽
Linux信号屏蔽机制解析:进程通过设置信号屏蔽字(SignalMask)临时阻止特定信号处理,内核将信号存入pending表待后续处理。核心函数sigprocmask支持添加/解除/替换屏蔽规则,需配合sigset_t位图操作。关键点包括:仅可屏蔽非SIGKILL/SIGSTOP信号、屏蔽不影响信号处理方式、非实时信号会合并处理。典型应用场景包括保护临界区代码、避免非异步安全函数重入及实现优雅退出。该机制通过将异步信号转为可控处理,有效保障程序稳定性,是多进程编程的重要技术。原创 2026-01-01 23:52:16 · 1149 阅读 · 0 评论 -
Linux进程通信---4---信号量System V & POSIX
信号量是 Linux 内核维护的原子性计数器 + 等待队列同步:控制进程 / 线程的执行顺序(比如 A 必须等 B 完成后再执行);互斥:保护共享资源(如共享内存、打印机)不被并发修改。System V 信号量是Linux/Unix 内核提供的进程间通信(IPC)机制,属于 System V IPC 家族(另外两个是共享内存、消息队列),核心作用是实现多进程间的同步与互斥,保护「临界资源」(如共享内存、打印机、标准输出)不被多个进程同时访问,避免数据竞争或操作混乱。特性System V 信号量。原创 2025-12-31 14:26:17 · 813 阅读 · 0 评论 -
动静态库制作与使用
静态库:编译嵌入,独立运行,体积大,更新需重编;动态库:运行加载,共享代码,体积小,更新灵活;制作核心:静态库用ar打包,动态库需-fPIC-shared;-L指定路径,-l指定库名,动态库需解决加载路径。原创 2025-12-17 18:15:17 · 709 阅读 · 0 评论 -
Linux进程通信---5---System V 消息队列
SystemV消息队列是Linux/Unix系统中重要的进程间通信机制,采用内核维护的带类型消息链表实现结构化数据传输。核心特点包括:消息类型化支持按类型读取、内核持久化、全双工通信及原子操作。相比命名管道,它支持结构化消息传输和优先级读取;与共享内存相比,虽性能略低但无需额外同步。主要操作函数包括msgget()创建队列、msgsnd()发送消息、msgrcv()接收消息和msgctl()控制队列。原创 2025-12-30 21:06:56 · 1160 阅读 · 0 评论 -
Linux进程通信---3---System V 共享内存
System V 共享内存是性能最高的 IPC 机制,核心是 “内核物理内存映射到进程虚拟地址空间”,实现零拷贝数据共享;ftok()生成键值 →shmget()创建 / 获取段 →shmat()映射到进程空间 → 读写数据 →shmdt()解除映射 →删除段;关键要点:必须配合信号量 / 互斥锁实现同步,避免竞态条件;内存大小按页对齐,按需申请避免浪费;用完必须调用,防止内核资源泄漏;现代开发中,POSIX 共享内存(shm_openmmap。原创 2025-12-30 20:41:53 · 1845 阅读 · 0 评论 -
Linux进程通信---2---命名管道
命名管道(FIFO)是Linux系统中特殊的进程间通信机制,通过文件系统路径标识,支持无亲缘关系进程通信。与匿名管道相比,FIFO具有文件系统实体、手动管理生命周期等特点。其核心特性包括先进先出、半双工通信和内核缓冲。实现上依赖inode和pipe_inode_info内核结构,通过环形缓冲区进行数据传输。创建方式包括mkfifo命令和系统调用,支持阻塞/非阻塞模式。读写操作需注意原子性(PIPE_BUF限制)和SIGPIPE信号处理。典型应用包括日志收集、命令行工具协作和客户端-服务器模型.原创 2025-12-30 20:25:04 · 945 阅读 · 0 评论 -
Linux进程通信---1---匿名管道
匿名管道(Pipe)是Linux/Unix系统中用于亲缘进程间通信的IPC机制,通过pipe()系统调用创建。它包含读端和写端两个文件描述符,实现单向字节流传输。使用时父进程创建管道后fork子进程,通过关闭不需要的端形成单向通信链路。管道采用内核环形缓冲区,默认大小4KB,具有阻塞特性和引用计数管理。优点在于简单高效,缺点是仅支持亲缘进程且为半双工通信。典型应用包括进程池任务分发和命令行管道操作(如ls|grep)。底层通过内核数据结构pipe_inode_info管理缓冲区和引用计数,确保通信可靠性。原创 2025-12-30 20:18:24 · 1317 阅读 · 0 评论 -
Linux Makefile 从入门到精通
摘要:本文系统介绍了Linux下Makefile的编写与应用。从基础概念入手,详细讲解了Makefile的核心语法、变量定义、自动推导规则和依赖关系管理。通过单文件到多文件项目的实战案例,展示了如何高效组织C/C++项目编译流程。文章还涵盖高级技巧如目录分离、条件编译、依赖管理,以及常见问题解决方法。Makefile作为自动化编译工具,能显著提升开发效率,通过合理设计编译规则实现智能依赖检查和增量编译,是Linux开发必备技能。掌握本文内容可满足90%的C/C++项目构建需求。原创 2025-12-23 17:54:23 · 1101 阅读 · 0 评论 -
进程虚拟地址空间(Virtual Address Space, VAS)深度解析
进程虚拟地址空间操作系统为每个进程提供的「抽象内存视图」,是一组连续的、从 0 开始的地址(比如 x86 架构是 0~4GB,x86-64 是 0~128TB);进程所有的内存操作(读写变量、调用函数、打开文件)都基于这组虚拟地址,而非直接操作物理内存;每个进程的虚拟地址空间是完全独立的:进程 A 的虚拟地址0x1000和进程 B 的0x1000可以映射到不同的物理内存页,互不干扰。虚拟地址空间是 “地址范围”,不是实际内存;物理内存是 “存储介质”,虚拟地址需通过内核映射才能访问物理内存。原创 2025-12-22 00:22:15 · 1084 阅读 · 0 评论 -
页表(Page Table)深度解析:虚拟地址映射的核心字典
实现地址虚拟化:将进程的虚拟地址精准映射到物理地址,屏蔽物理内存的分布细节;保障隔离与安全:通过独立页表和控制位,实现进程间内存隔离和权限控制;优化内存效率:结合缺页中断实现按需加载,结合多级页表减少页表内存占用;提升访问性能:通过 TLB 缓存和大页,降低地址转换的时间开销。虚拟地址空间提供了进程的 “内存假象”(连续、独立);页表将这份 “假象” 落地为物理内存的实际映射;MMU 和 TLB 则为映射提供了硬件级别的高效支持。原创 2025-12-21 23:37:48 · 1138 阅读 · 0 评论 -
Linux ELF 详解:从定义到底层原理
ELF 是 Linux 系统底层的「二进制文件标准」,其核心价值在于统一链接和加载的接口对开发者:编译(gcc)生成.o目标文件,链接(ld)生成可执行文件 / 共享库,无需关注底层格式细节。对系统:加载器(内核)和动态链接器()通过 ELF 头部和表结构,标准化地完成程序加载和运行。理解 ELF 的结构和流程,是深入掌握 Linux 程序运行原理、动态链接、调试崩溃问题的关键基础。建议结合readelfobjdump工具实际分析一个简单的 C 程序(如hello.c编译后的a.out。原创 2025-12-20 23:43:02 · 1055 阅读 · 0 评论 -
Linux - 软硬链接
Linux系统提供两种文件链接机制:硬链接和软链接。硬链接通过共享inode实现文件多路径访问,删除原始文件不影响链接访问,但不支持跨文件系统和目录链接。软链接是存储目标路径的独立文件,支持跨系统和目录链接,但原始文件删除会导致链接失效。硬链接适合文件备份和多路径访问,软链接更适合路径简化和跨设备访问。理解二者差异(inode共享vs路径指向)能帮助用户根据实际需求选择合适方式。原创 2025-12-16 03:05:58 · 1083 阅读 · 0 评论 -
Linux_文件超详细合集: 软件->硬件
本期Blog介绍了基于Linux的文件系统几乎全部的知识点:从文件在软件层的创建,销毁,重命名,输入输出等操作到文件在系统底层的相关操作,再到文件在物理层面的存储方式.我会用尽量简单的方式向你讲解,同时也是向我自己讲解.如果中途你遇到了一些看不懂的,不妨往下看看,也许解释会在后面,因为这些知识点之间关系复杂,很难用线性方式讲解.原创 2025-12-16 01:17:26 · 1525 阅读 · 4 评论 -
Linux进程
命名含义l= list(列表参数),e= environment(自定义环境变量)。函数原型参数解释patharg:与execl()一致(路径 + 列表参数,最后NULL结尾)。envp:自定义的环境变量数组(每个元素格式为,最后以NULL结尾),会覆盖当前进程继承的环境变量。示例(执行自定义程序./myprog,并传自定义环境变量):// 自定义环境变量// 最后一个参数是envp数组特点:可自定义新程序的环境变量,适合需要隔离环境的场景(普通exec函数会继承父进程的环境变量)。原创 2025-11-28 03:55:49 · 748 阅读 · 0 评论 -
Linux 环境变量:定义、核心作用与实操指南
Linux环境变量是动态键值对,用于存储系统配置和路径信息。主要特性包括动态修改、继承性(子进程继承父进程变量)和作用域(局部/全局)。程序员常用变量如PATH(可执行程序路径)、HOME(用户目录)和LD_LIBRARY_PATH(动态库路径)。 设置方式:临时用export命令,永久修改需写入配置文件(如~/.bashrc)。C/C++通过getenv()和setenv()操作变量,但修改仅影响当前进程。Bash作为父进程初始化并传递环境变量给子进程(如C程序),同时提供命令行接口管理变量。 注意事项:原创 2025-11-27 02:45:20 · 1115 阅读 · 0 评论
分享