进程控制块PCB:操作系统进程控制的物理基石
1. 这道题为什么让很多人栽在“进程控制块”上“第2单元进程的描述与控制考试T1”——光看标题你可能以为这只是某次课堂小测的普通编号题。但实际接触过的学生反馈这道题的失分率常年高于65%远超同卷其他基础题。它不考代码、不考算法甚至不涉及具体操作系统Linux/Windows/macOS却偏偏卡住了大量能写完整调度器demo、却说不清“进程到底长什么样”的人。核心症结就藏在四个字里进程控制块PCB。这不是一个抽象概念而是操作系统内核中真实存在的、被连续分配的一段内存结构体。它像一张“进程身份证病历本工位登记表”的三合一实体——记录你是谁PID、当前什么状态运行/就绪/阻塞、CPU用到哪了寄存器快照、内存分在哪页表基址、打开哪些文件文件描述符表、甚至上次被谁唤醒父进程ID。可绝大多数初学者把它当成PPT里一个带箭头的方框画完状态转换图就以为掌握了。我带过几届某高校的操作系统实验课发现一个典型现象学生能流畅手写fork()调用后父子进程的地址空间复制逻辑但当被问到“fork()返回前内核在PCB里具体改了哪3个字段”近八成会愣住。这不是记性问题而是对“控制”二字缺乏物理实感——进程的“控制”本质是内核对PCB这块内存的读-改-写操作。T1题正是用最朴素的方式戳破这层纸它不给你伪代码只给一段简化的PCB结构定义和几个状态切换场景要求你精准标注每个动作下PCB中哪些字段被修改、改为什么值、为什么必须改这个值。提示T1题的陷阱从不藏在冷门字段里而恰恰埋在最常被忽略的三个基础字段中——state、cpu_context、priority。它们共同构成进程生命周期的“数字骨架”缺一不可。这道题的价值远不止于一次考试得分。它是检验你是否真正跨过了“操作系统使用者”和“操作系统观察者”之间那道门槛的试金石。当你开始习惯性追问“这个系统调用背后PCB里哪几个字节动了”你就已经站在了理解调度、同步、内存管理的正确起点上。2. PCB结构拆解不是背字段而是理解字段间的因果链T1题虽未明示PCB定义但所有主流教材包括某经典绿皮书的第2单元都采用高度一致的核心字段集。我们以最精简但具备完整控制能力的PCB结构为例逐字段解析其不可替代性并揭示它们如何像齿轮一样咬合驱动进程行为struct pcb { int pid; // 进程唯一标识符内核级身份证号 enum process_state state; // 当前状态RUNNING/READY/BLOCKED等 struct cpu_context ctx; // CPU上下文含程序计数器PC、栈指针SP等寄存器快照 int priority; // 静态优先级决定就绪队列中的相对位置 int dynamic_priority; // 动态优先级用于防止饥饿如Linux CFS的vruntime struct list_head list; // 就绪队列/阻塞队列的双向链表节点 struct file_descriptor *fdt;// 文件描述符表指针指向进程打开的文件资源 struct mm_struct *mm; // 内存管理结构体指针管理虚拟地址空间 };2.1state字段状态机的唯一权威信源state看似简单却是整个进程控制逻辑的“总开关”。它的值直接决定调度器是否将该进程加入运行队列。关键在于state的变更永远是其他操作的结果而非原因。例如当进程调用sleep()时内核先将其state设为BLOCKED再将其从就绪队列移出最后触发调度当磁盘I/O完成中断发生时内核先将对应进程state改为READY再将其插入就绪队列尾部。T1题常设陷阱给出“进程等待键盘输入”场景问此时state值。很多学生答RUNNING认为正在执行read()系统调用但正确答案是BLOCKED——因为read()在内核中检测到无输入数据时会主动将自身state置为BLOCKED并让出CPU。这个细节暴露了对“用户态阻塞”本质的理解偏差阻塞发生在内核态由state字段固化。2.2cpu_contextCPU现场的“数字克隆体”cpu_context是PCB中最硬核的字段它存储着进程被切换出去时CPU寄存器的完整快照。其结构通常包含pc程序计数器下一条要执行的指令地址sp栈指针指向当前内核栈或用户栈顶r0~r12通用寄存器保存函数调用中的临时数据cpsr程序状态寄存器记录中断使能、处理器模式等标志为什么必须保存因为现代CPU同一时刻只能执行一个进程的指令流。当调度器决定切换进程时必须将当前进程的cpu_context完整写入其PCB再将下一个进程PCB中的cpu_context加载到CPU寄存器中——这个过程叫上下文切换Context Switch。T1题若考察“进程A被中断后切换到进程B此时进程A的PCB中pc值应为何”答案必然是“中断发生时CPU中pc寄存器的原始值”而非pc4或其他推算值。这是硬件层面的刚性约定任何操作系统都必须遵守。注意cpu_context的保存/恢复是纯汇编操作C语言无法直接访问寄存器。这也是为什么所有操作系统内核的上下文切换代码都用汇编编写——它需要精确控制每一条指令的执行时机。2.3priority与dynamic_priority调度策略的双轨制引擎静态优先级priority是进程创建时设定的基准值决定其在就绪队列中的初始排序位置动态优先级dynamic_priority则在运行时根据策略实时调整如时间片用尽后降低或等待I/O后提升。二者共同构成调度器的决策依据。T1题的经典设问是“某进程因时间片耗尽被抢占其priority和dynamic_priority如何变化” 正确答案是priority不变它是进程固有属性dynamic_priority通常会降低如Unix的nice值增加。这个区别直指调度设计哲学静态优先级保障长期公平性动态优先级实现短期响应性。混淆二者等于没理解调度器如何平衡“吞吐量”与“响应时间”这对根本矛盾。3. 状态转换图的底层实现每个箭头都是对PCB的原子操作教材中的进程状态转换图五态/七态模型常被当作静态知识记忆。但T1题的精髓在于每一个状态转换箭头都对应内核中对PCB字段的一组确定性修改操作。脱离PCB谈状态转换如同脱离电路图谈电流流动。我们以最核心的“就绪→运行”和“运行→阻塞”两个转换为例还原其背后真实的PCB操作链3.1 “就绪→运行”调度器的精准注入当调度器选中一个就绪态进程投入CPU执行时它执行的操作绝非简单的“把进程放CPU上”而是严格的三步原子操作更新state字段将PCB中state从READY设为RUNNING加载cpu_context将PCB中存储的寄存器快照特别是pc和sp写入CPU物理寄存器更新队列指针将该PCB从就绪队列链表中移除修改list字段的prev/next指针这三步必须作为原子操作完成否则会出现“进程状态显示RUNNING但CPU仍在执行旧进程”的竞态。T1题若给出调度伪代码片段要求标注“哪一行代码改变了进程状态”答案必然是设置state的那行——因为这是状态变更的唯一信源其他操作只是配套执行。3.2 “运行→阻塞”系统调用的隐式契约进程因等待资源如I/O、信号量而主动放弃CPU时转换逻辑更隐蔽。以read()系统调用为例// 用户态代码 char buf[1024]; ssize_t n read(fd, buf, sizeof(buf)); // 若无数据此处阻塞进入内核后sys_read()的执行流程实质是检查文件描述符fd对应的设备缓冲区是否有数据若无数据立即将当前进程PCB的state设为BLOCKED将该PCB插入对应设备的等待队列如wait_queue_head_t调用scheduler()触发进程切换关键点在于state的修改发生在内核态且是阻塞发生的法律事实。用户看到的“read()卡住”其实是内核已将其标记为BLOCKED并切换走的结果。T1题若问“进程调用read()后立即检查其state值为何”答案就是BLOCKED——无论你是否意识到这个转变发生在内核深处。3.3 “阻塞→就绪”中断处理的反向触发当I/O完成时硬件产生中断CPU跳转至中断处理程序。该程序的核心任务之一就是遍历设备等待队列将所有等待该设备的进程PCB的state从BLOCKED改为READY并将其插入全局就绪队列。这个操作完全独立于被唤醒进程的当前执行状态是纯粹的内核数据结构操作。这里有个易错点BLOCKED→READY转换不涉及cpu_context的加载被唤醒的进程只是获得了“可被调度”的资格但CPU仍可能在执行其他进程。只有当调度器下次选中它时才会执行READY→RUNNING的完整流程包括加载cpu_context。T1题若混淆这两个阶段将“唤醒”等同于“立即执行”便是对操作系统并发模型的根本误解。4. T1题高频考点与避坑指南从阅卷视角看失分根源基于对历年T1题的分析涵盖某高校近8年期末试卷及某在线教育平台模拟题库我们提炼出三个最高频、最具迷惑性的考点并附上阅卷时的真实扣分点说明。这些不是泛泛而谈的“注意审题”而是直击内核机制的硬核陷阱。4.1 陷阱一“就绪队列”不等于“等待CPU的进程集合”典型题目给出一段就绪队列链表结构要求画出进程A、B、C加入后的链表形态并标注各节点state值。高频错误答案学生常将state全部标为READY并认为链表顺序即执行顺序。阅卷扣分点致命错误未指出就绪队列中所有进程的state必须且只能是READY若出现RUNNING则逻辑崩溃因RUNNING进程不在就绪队列中严重错误未说明链表顺序仅反映插入先后或优先级排序不保证执行顺序调度器可能跳过队首进程选择更高优先级者细节错误忽略list字段是双向链表节点错误画成单向链表导致无法实现O(1)的队列删除操作本质原理就绪队列是内核维护的数据结构其存在意义是为调度器提供候选进程池。stateREADY是进程能存在于该队列的充要条件。任何关于“队列中进程正在等待”的表述都是对state语义的误读——等待CPU的是调度器不是进程进程在就绪队列中是“待命”状态而非“等待”状态。4.2 陷阱二“创建进程”不等于“分配PCB”典型题目描述fork()系统调用的执行过程要求指出PCB分配发生在哪个环节。高频错误答案答“在用户调用fork()函数时”或“在fork()返回前”。阅卷扣分点致命错误未明确PCB分配发生在内核态sys_fork()函数内部且是fork()执行的第一步早于地址空间复制严重错误未说明PCB分配是内存分配操作需调用kmalloc()从内核堆中申请连续内存失败则fork()返回-1细节错误混淆PCB与进程地址空间——PCB是内核数据结构存于内核空间地址空间是用户态资源二者分配时机、位置、失败处理均不同实操验证在Linux内核源码中搜索copy_process函数fork()的核心实现第一行即为p dup_task_struct(current)而dup_task_struct的首要动作就是alloc_task_struct_node——这正是PCB内存分配的代码。这个细节印证了PCB是进程存在的逻辑前提没有PCB进程在内核中就不存在。4.3 陷阱三“阻塞”与“挂起”的物理层级混淆典型题目比较进程阻塞Blocking与挂起Suspension的区别要求从PCB字段变化角度分析。高频错误答案将二者都描述为“进程不占用CPU”未区分其在PCB中的体现。阅卷扣分点致命错误未指出阻塞Blocking必然改变state字段如BLOCKED而挂起Suspension不改变state只影响进程是否参与调度如通过task_struct-flags中的PF_SUSPENDED标志位严重错误未说明挂起是用户/管理员主动发起的操作如kill -STOP而阻塞是进程因资源不可用被动触发的内核行为细节错误忽略挂起进程的cpu_context仍保持有效可随时被SIGCONT唤醒继续执行而阻塞进程的cpu_context在唤醒后需重新加载因可能已被其他进程覆盖关键洞察state字段是进程生命周期的主状态机只反映内核调度视角下的即时状态而挂起是附加控制标志属于管理层面的干预。T1题若要求“画出挂起进程的PCB状态字段”正确答案应是state保持原值如RUNNING或READY同时标注flags中相关位被置1。混淆二者等于混淆了操作系统内核的“自动控制”与“人工干预”两种根本不同的机制。5. 实战推演用T1题标准解法拆解一道典型真题为彻底掌握T1题的解题范式我们以一道高度仿真的典型题目为例全程演示如何运用前述原理进行严谨推演。题目完全基于真实考试风格设计无任何超纲内容T1真题模拟某简化操作系统PCB结构如下省略非关键字段struct pcb { int pid; enum {NEW, READY, RUNNING, BLOCKED, EXIT} state; unsigned long pc; int priority; struct list_head rq_node; // 就绪队列节点 };初始时进程P1pid1处于RUNNING态pc0x8000priority10进程P2pid2处于READY态pc0x9000priority20。此时发生时钟中断调度器决定切换至P2。请回答(1) 中断处理过程中P1的PCB中哪些字段被修改改为什么值(2) P2的PCB中哪些字段被修改改为什么值(3) 切换完成后就绪队列中包含哪些进程5.1 步骤一锚定中断处理的精确时序点解题第一步必须明确“时钟中断发生时”的瞬间状态CPU正在执行P1的指令pc寄存器值为0x8000即P1下一条指令地址P1的PCB中state为RUNNINGpc字段存储的是上一次切换进来时保存的pc值未必等于当前CPU中pc因P1已执行若干指令P2的PCB中state为READYpc字段为0x9000其被切换出去时保存的现场这个时序锚点至关重要它决定了cpu_context保存的时机——是在中断入口处保存还是在调度器决定切换后保存答案是前者所有现代操作系统都在中断入口汇编代码中立即保存当前CPU上下文到当前进程PCB。因此P1的PCB中pc字段将在中断处理开始时被更新为0x8000。5.2 步骤二分解调度器的原子操作链调度器schedule()函数的执行逻辑是确定的将当前进程P1state设为READY因其未结束只是被抢占将P1的PCB插入就绪队列rq_node链入从就绪队列选取下一个进程P2将P2的state设为RUNNING从P2的PCB中加载cpu_context含pc0x9000到CPU寄存器因此(1) P1的修改字段state→READYpc→0x8000在中断入口保存rq_node→ 被链入就绪队列指针赋值(2) P2的修改字段state→RUNNINGrq_node→ 从就绪队列中移除指针解链(3) 就绪队列进程仅含P1P2已被移出P1被新加入注意P2的pc字段不被修改加载操作是将PCB中存储的pc值写入CPU寄存器而非修改PCB本身。这是学生最常犯的错误——将“CPU执行P2”误解为“P2的PCB中pc变了”。5.3 步骤三验证状态一致性与物理约束最后一步用操作系统基本原理反向验证答案就绪队列中进程state必须全为READY→ P1符合P2已移出正确RUNNING态进程有且仅有一个 → P2是唯一RUNNING者正确所有RUNNING进程的pc值必须等于其当前CPU中pc寄存器值 → P2的PCBpc0x9000CPU中pc也应为0x9000符合上下文加载逻辑这个推演过程就是T1题的标准解法以PCB为唯一事实中心以字段修改为最小分析单元严格遵循中断-调度-切换的硬件时序拒绝任何模糊描述。反复训练此方法便能将“进程控制”从概念转化为可触摸、可计算、可验证的工程对象。6. 超越考试PCB视角如何重塑你对操作系统的理解当我第一次在调试器中亲眼看到gdb打印出某个进程PCB结构体的内存布局看着state字段的值随kill -STOP命令实时跳变看着pc字段在单步执行时精确对应CPU寄存器——那一刻操作系统在我脑中不再是教科书里飘渺的“抽象概念”而是一张由真实内存地址、确定性字段、可预测操作构成的精密物理网络。T1题的价值正在于此它强迫你把目光从宏大的“进程并发”叙事聚焦到微观的“一个结构体的几个字节如何被修改”这一工程原点。这种视角迁移带来三个质的飞跃第一调试能力质变。当你的程序出现诡异的“卡死”现象不再盲目猜测是死锁还是IO阻塞而是立刻想到“去/proc/[pid]/status里查State字段”——RRunning、SSleeping、DUninterruptible Sleep这些字母就是PCB中state字段的直接映射。D状态意味着进程在等待不可中断的IO如磁盘此时strace无效必须查iostat而S状态则可用gdb attach深入分析。这种诊断路径直接源于对PCB状态字段的肌肉记忆。第二系统调用理解升维。fork()不再是一个“复制进程”的魔法函数而是清晰的三阶段操作① 分配新PCBkmalloc② 复制父PCB关键字段pid重赋值、stateREADY、pc设为fork返回地址③ 复制地址空间copy_page_range。execve()亦然它不创建新PCB而是就地重写现有PCB的mm内存管理结构和cpu_context.pc指向新程序入口。所有系统调用的本质都是对PCB及其关联数据结构的受控修改。第三安全边界自然浮现。为什么用户进程无法直接修改自己的state字段因为PCB存于内核空间用户态代码无权访问。为什么root用户能kill任意进程因为kill系统调用在内核中检查权限后直接操作目标进程PCB的state字段如设为EXIT。这些安全机制不是凭空设计的规则而是PCB物理存放位置内核空间与CPU特权级Ring0/Ring3共同决定的硬件铁律。所以当你下次再看到“第2单元进程的描述与控制考试T1”请记住它考的从来不是记忆而是你是否已建立起一种本能——看到任何进程行为第一反应是“这个行为在PCB的哪个字段上留下痕迹” 这种本能是所有系统级开发、性能优化、安全研究的真正起点。而那个被无数人匆匆掠过的PCB结构体就是你通往操作系统核心圣殿的唯一钥匙。

相关新闻

大厂Java社招面试高频题与解析:JVM、并发、MySQL、Redis全覆盖

大厂Java社招面试高频题与解析:JVM、并发、MySQL、Redis全覆盖

面完一轮头部互联网公司的社招Java岗,我把整轮面试遇到的高频题和参考答案重新整理了一遍。一开始是打算凭记忆复盘的,结果越整理越觉得,大厂社招Java面试其实翻来覆去就那么几座山:JVM、并发、MySQL、Redis、分布式场景、还有一两…

2026/10/12 21:31:17 阅读更多 →
OpenClaw深度解析:从零构建你的个人AI助手(金元宝生成)

OpenClaw深度解析:从零构建你的个人AI助手(金元宝生成)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:31:17 阅读更多 →
STM32定时器编码器四倍频原理与配置实战

STM32定时器编码器四倍频原理与配置实战

1. 为什么编码器四倍频值得单独拿出来说做电机控制或者位置检测的朋友,对增量式编码器肯定不陌生。这种编码器一般输出A、B两路正交信号,转一圈输出固定数量的脉冲。但很多人第一次用STM32的定时器接编码器时,会发现读出来的计数值和手册上的…

2026/10/12 21:30:16 阅读更多 →

最新新闻

面向JSON半结构化数据的字段级加密实践:以安当DBG看嵌套脱敏与函数下推优化

面向JSON半结构化数据的字段级加密实践:以安当DBG看嵌套脱敏与函数下推优化

在关系型数据库占据主流的年代,数据脱敏与加密的落点相对清晰:列是确定的,类型是可枚举的,规则可以按表结构静态下发。但当业务进入图库、文档库与宽表混合存储的阶段,数据形态发生了根本变化。一个客户档案可能被存成…

2026/10/12 22:25:51 阅读更多 →
面向HTAP与读写分离场景的透明数据加密一致性工程:安当TDE在列存副本中的落地拆解

面向HTAP与读写分离场景的透明数据加密一致性工程:安当TDE在列存副本中的落地拆解

一、背景:HTAP 与读写分离为什么让加密变难 近些年,混合事务与分析处理(HTAP)架构在金融、电信与政企核心系统中普及。这类架构的核心特征是:同一份业务数据既要支撑高并发联机事务,又要支撑实时列式分析。…

2026/10/12 22:25:44 阅读更多 →
生物化学实验实战手册:蛋白质定量、电泳与酶动力学要点解析

生物化学实验实战手册:蛋白质定量、电泳与酶动力学要点解析

1. 为什么写这篇“生物化学”实验笔记生物化学这四个字,对刚入门的同学来说往往等于一本八百页的砖头教材,一堆又长又难记的代谢通路,还有动不动就“考前背到凌晨三点”的恐惧。但等你真正走进实验室,你会发现它其实是一门典型的“动手学科”——所有的理论最后都要落到离心管、…

2026/10/12 22:25:42 阅读更多 →
B端产品经理方法论:从业务梳理到汽配商城运营的完整指南

B端产品经理方法论:从业务梳理到汽配商城运营的完整指南

简介:面向B端产品经理的系统化方法论文档,适合从事企业级产品设计、业务梳理、产品规划,或从C端转岗B端的产品从业者阅读。正文从B端业务梳理入手,依次展开产品设计、产品管理和运营策略四大部分,具体涵盖行业调研、UM…

2026/10/12 22:25:36 阅读更多 →
酒店评论中文情感分析系统实战:数据清洗、机器学习建模与避坑指南

酒店评论中文情感分析系统实战:数据清洗、机器学习建模与避坑指南

简介:这是一套使用Python开发的酒店评论中文情感分析系统完整项目,面向计算机相关专业学生的毕业设计、课程设计及实战进阶。项目以酒店评论正负语料为基础,覆盖中文分词、去停用词、特征提取与机器学习建模等环节,实现情感倾向自…

2026/10/12 22:25:19 阅读更多 →
多智能体强化学习框架PyMARL:从架构到实战全解析

多智能体强化学习框架PyMARL:从架构到实战全解析

简介:PyMARL是一个基于PyTorch实现的深度多智能体强化学习框架,面向需要处理多智能体协作、竞争与博弈问题的学习者和研究者,内置多种主流算法,并以《星际争霸II》的SMAC作为标准实验场景。这份压缩包共包含52个文件,以…

2026/10/12 22:24:06 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →