Linux进程状态深度解析:运行、阻塞与挂起机制及排查实践
1. 从一个真实场景说起为什么你的进程监控脚本会“骗”你刚入行那会儿我写过一个特别朴素的进程守护脚本逻辑就一句话每隔几秒扫一遍进程列表如果目标进程不在了就拉起来。当时觉得这逻辑天衣无缝直到线上出了个诡异的问题——某个服务进程明明还在进程列表里躺着端口却死活连不上脚本也傻乎乎地认为“一切正常”没有任何动作。后来排查了半天才反应过来那个进程处于阻塞状态它确实“存在”但它根本没在干活。这件事让我意识到一个很基础但特别容易被忽略的事实进程的“存在”和进程的“运行”完全是两码事。你在ps命令里看到的那个 PID可能正在 CPU 上飞驰可能正躺在某个队列里等一个永远不来的信号也可能已经被换出到磁盘上睡大觉了。这三种状态——运行、阻塞、挂起——构成了理解 Linux 进程调度和系统行为的地基。这篇内容就是围绕这三个状态展开的。我会从进程状态的整体设计思路讲起把运行态、阻塞态、挂起态各自的触发条件、内核里的表示方式、以及它们之间怎么互相转换讲透然后落到实操层面怎么用工具观察这些状态、怎么区分“阻塞”和“挂起”这种容易混淆的概念、遇到进程卡死时怎么一步步定位。适合已经会用ps、top但对进程调度机制还停留在“背概念”阶段的同学也适合想搞清楚系统卡顿根因的运维和开发。先把结论摆前面运行、阻塞、挂起不是三个孤立的标签而是一条状态机上的节点理解它们的关键在于搞清楚“进程在等什么”和“进程被放在哪里”这两件事。2. 进程状态的整体设计与思路拆解2.1 为什么内核要给进程定义这么多状态要理解进程状态得先想明白内核面临的核心矛盾CPU 数量永远少于想用 CPU 的进程数量。一台机器可能就几个核但上面跑着几百个进程如果每个进程都霸着 CPU 不放系统直接瘫痪。所以内核必须有一套机制决定“谁现在能用 CPU”“谁先等着”“谁干脆先挪到一边去”。进程状态就是这套机制的“账本”。内核通过给每个进程打上状态标记来管理调度决策。你可以把它想象成一个餐厅的后厨灶台CPU就那么几个厨师进程有一堆。有的厨师正在灶台上炒菜运行态有的在等配菜送过来才能下锅阻塞态有的因为厨房太挤被请到外面等着叫号挂起态。餐厅经理调度器要根据每个厨师的状态决定下一步安排谁上灶。这里有个关键设计思想状态划分的粒度直接决定了调度器的效率。如果只分“在跑”和“没跑”两种调度器就没法区分“这个进程马上就能跑”和“这个进程要等十分钟后的一个网络包”结果就是调度器会浪费大量时间在那些根本跑不起来的进程上做无用功。所以内核把“没跑”的状态进一步细分把“等资源”和“被挪走”区分开调度器就能优先照顾那些真正 ready 的进程。2.2 运行态、阻塞态、挂起态的本质区别很多人背概念的时候会把这三个状态记成“运行就是占着 CPU阻塞就是等 IO挂起就是被换出内存”这么记没错但不够本质。我用一句话概括它们的核心差异运行态Running / Runnable进程具备运行的一切条件只差 CPU。注意这里有个细节Linux 里严格来说“正在 CPU 上执行”和“在就绪队列里排队等 CPU”都算运行态内核里用TASK_RUNNING表示因为对调度器来说这两种情况的处理逻辑是一样的——都是“可以立刻调度”。阻塞态Blocked / Sleeping进程在等一个外部事件比如等 IO 完成、等锁释放、等信号到来。在事件发生之前就算把 CPU 给它它也干不了活。所以内核把它从就绪队列里摘出来放到对应的等待队列里。挂起态Suspended进程被主动“冻结”了通常是因为内存紧张被换出到磁盘或者被用户手动暂停比如CtrlZ。它和阻塞态最大的区别是挂起态可能并不在等任何事件只是暂时不被允许参与调度。这里要特别强调一个容易搞混的点阻塞和挂起都会让进程“不运行”但原因和恢复条件完全不同。阻塞是“我在等东西”东西到了我就能继续挂起是“我被暂停了”得有人主动把我唤醒。这个区别在排查问题时至关重要后面会展开讲。2.3 状态转换图背后的调度逻辑进程状态不是静态的它们之间会来回转换。我把核心的转换路径梳理一下你对照着理解调度器的工作方式当前状态触发事件目标状态内核动作运行态时间片用完运行态就绪放回就绪队列尾部运行态请求 IO / 等锁阻塞态移出就绪队列加入等待队列运行态被信号暂停挂起态标记为暂停移出调度阻塞态等待的事件完成运行态就绪从等待队列移回就绪队列挂起态收到恢复信号运行态就绪重新加入调度运行态内存紧张被换出挂起态页换出标记挂起这张表看着简单但每一行背后都是一段内核代码。比如“请求 IO 进入阻塞态”这一步内核要做的事情包括把进程状态从TASK_RUNNING改成TASK_INTERRUPTIBLE或TASK_UNINTERRUPTIBLE、把自己挂到对应设备的等待队列上、然后主动调用schedule()让出 CPU。这一套动作下来进程才算真正“睡过去”。提示TASK_INTERRUPTIBLE和TASK_UNINTERRUPTIBLE的区别很关键。前者可以被信号唤醒比如你kill它有用后者连信号都不理就是传说中的 D 状态kill -9都杀不掉。理解这个区别是排查“进程杀不死”问题的钥匙。3. 核心细节解析与实操要点3.1 运行态不只是“正在跑”先纠正一个常见误解。很多资料说“运行态就是进程正在 CPU 上执行”这话对一半。在 Linux 内核里TASK_RUNNING这个状态同时涵盖了“正在 CPU 上跑”和“在就绪队列里等着跑”两种情况。为什么这么设计因为对调度器来说这两种进程的处理方式是一样的——它们都是“可调度”的区别只是谁先谁后的问题。你可以用ps命令观察一下R状态Running 或 Runnable的进程有的确实在消耗 CPU有的 CPU 占用是 0.0那就是在就绪队列里排队。判断一个 R 状态进程到底在不在跑得结合top里的 CPU 使用率一起看。这里有个实操技巧如果你发现系统负载很高uptime里的 load average 飙升但 CPU 使用率并不高那大概率是一堆进程卡在 D 状态不可中断阻塞而不是真的在跑。这个判断在排查“系统变慢但 CPU 不忙”的问题时特别有用。3.2 阻塞态进程在等什么阻塞态是三个状态里最复杂、也最值得深挖的。因为“等”这件事在 Linux 里分好几种情况对应不同的内核状态标记可中断睡眠STASK_INTERRUPTIBLE进程在等一个可以被信号打断的事件比如等read()返回数据、等sleep()时间到。这种状态下你给它发个信号比如kill它能被唤醒去处理信号。不可中断睡眠DTASK_UNINTERRUPTIBLE进程在等一个不能被打断的事件典型的是等磁盘 IO 完成。这种状态下信号都叫不醒它kill -9也没用只能等 IO 自己完成。可杀死睡眠KTASK_KILLABLE这是后来引入的折中方案本质是“可以响应致命信号的不可中断睡眠”用来解决 D 状态进程杀不掉的尴尬。为什么要有“不可中断”这种设计因为有些操作必须原子完成中途被打断会导致数据不一致。比如进程正在从磁盘读一个数据块到内存如果读到一半被信号打断去处理别的事那这个数据块就处于半读状态后续使用会出问题。所以内核干脆让这种等待“刀枪不入”等 IO 完成了再说。注意D 状态进程如果长时间不消失通常意味着底层存储出了问题——可能是磁盘坏道、可能是网络存储挂载点失联、可能是驱动 bug。这时候别急着kill先去看dmesg和 IO 相关的监控指标。3.3 挂起态被“请出”调度队列的进程挂起态这个概念在不同语境下含义略有差异我按最常见的两种场景来讲。第一种是用户主动挂起也就是你按了CtrlZ。这时候进程收到SIGTSTP信号状态变成TStopped。它还在内存里只是被剥夺了调度资格你可以用fg把它调回前台或者用bg让它后台继续跑。这种挂起是“软”的恢复起来很快。第二种是系统级挂起也就是进程被换出到交换分区swap。这种情况通常发生在内存极度紧张时内核为了腾出物理内存把一些暂时不活跃的进程的页换到磁盘上。这种挂起是“硬”的恢复时需要把页重新读回内存会有明显的延迟。这两种挂起在ps里的表现不一样用户挂起显示为T而换出到 swap 的进程状态可能还是S或D但它的内存页已经不在物理内存里了。要观察后者得用vmstat看si/soswap in/out指标或者用/proc/[pid]/status里的VmSwap字段。3.4 状态标记速查与内核表示把 Linux 里常见的进程状态标记整理成一张表方便你对照ps输出快速判断ps 标记内核状态含义典型场景RTASK_RUNNING运行或就绪正在消耗 CPU 的进程STASK_INTERRUPTIBLE可中断睡眠等 IO、等信号、sleepDTASK_UNINTERRUPTIBLE不可中断睡眠等磁盘 IO、等内核锁TTASK_STOPPED暂停CtrlZ、调试器断点tTASK_TRACED被跟踪被调试器 attachZTASK_ZOMBIE僵尸已退出但父进程未回收XTASK_DEAD已死亡几乎看不到这张表建议存下来排查问题时对着看比翻文档快得多。特别是S和D的区别很多人第一次遇到 D 状态进程时会懵以为是磁盘坏了其实可能只是 IO 压力大。4. 实操过程与核心环节实现4.1 用 ps 和 top 观察进程状态先讲最基础的观察方法。ps命令的STAT列或者S列取决于你的ps版本就是进程状态。我常用的组合是ps -eo pid,ppid,stat,wchan:20,comm这里wchan字段特别有用它显示进程正在等待的内核函数名。比如一个进程卡在wait_for_completion上你就知道它在等某个完成信号卡在do_exit上说明它在退出过程中。这个字段是排查阻塞问题的第一手线索。top命令里状态显示在S列同时你可以按Shift H切换显示线程按1看每个 CPU 核的情况。我习惯用top -d 1 -o %CPU按 CPU 排序快速找到吃 CPU 的进程排查 IO 阻塞时用top -d 1 -o %MEM或者直接看D状态进程数量。4.2 构造一个阻塞进程并观察它的状态变化光看概念不够得动手造一个。下面这段 Python 代码会创建一个进程先跑一会儿然后进入阻塞等待import time import os print(f进程 PID: {os.getpid()}) print(开始运行 5 秒...) time.sleep(5) # 这段时间是 S 状态sleep 本质是阻塞 print(开始等待标准输入阻塞...) input() # 这里会一直阻塞直到你输入内容 print(收到输入继续运行) time.sleep(3) print(结束)运行这个脚本然后在另一个终端里反复执行ps -eo pid,stat,wchan,comm | grep python你会看到状态在S和R之间切换。当它卡在input()时wchan会显示类似wait_woken或pipe_read的内容说明它在等标准输入这个管道的数据。这个实验的价值在于你能亲眼看到“阻塞”不是一个抽象概念而是进程真的挂在了某个内核等待队列上。理解了这一点后面排查真实问题就有感觉了。4.3 制造一个 D 状态进程并尝试“杀死”它D 状态进程不好人为制造因为它需要真实的不可中断 IO。一个相对可控的方法是往一个慢速设备写数据比如往一个已经满了的管道里写或者用dd往一个限速的设备写# 创建一个限速的写入场景需要 root # 这里用 cgroup 限速或者直接往慢设备写具体方式因环境而异 dd if/dev/zero of/mnt/slow_device/test.img bs1M count1000 oflagdirectoflagdirect会绕过页缓存直接写设备如果设备本身慢进程就会进入 D 状态。这时候你在另一个终端kill -9它会发现杀不掉。用ps看状态是Dwchan显示blkdev_issue_flush之类的内核函数。这个实验能让你深刻体会到D 状态进程不是“不想死”而是“内核不允许它现在死”。等 IO 完成后它自然会响应信号退出。这也是为什么生产环境遇到 D 状态进程正确的做法是排查底层 IO而不是反复kill。4.4 用 /proc 文件系统深挖进程状态细节ps和top给的是概览要看细节得进/proc/[pid]/。几个关键文件/proc/[pid]/status里面有State字段显示完整的状态名比如S (sleeping)还有VmSwap字段看换出情况。/proc/[pid]/wchan显示进程当前等待的内核函数。/proc/[pid]/stack内核栈回溯需要 root能看到进程是怎么一步步走到当前阻塞点的。/proc/[pid]/sched调度相关信息包括等待时间、运行时间等。我排查一个“进程卡住”的问题时标准动作是cat /proc/[pid]/status | grep -E State|VmSwap cat /proc/[pid]/wchan cat /proc/[pid]/stack # 需要 root这三条命令下来基本能判断出进程是阻塞还是挂起、在等什么、卡在哪个内核路径上。比盲目strace高效得多。5. 常见问题与排查技巧实录5.1 进程杀不死怎么办这是最常被问到的问题。先看状态如果是D状态别挣扎了kill -9也没用。去查底层 IOiostat -x 1看设备利用率dmesg看有没有 IO 错误mount看有没有网络存储挂载点失联。如果是Z状态僵尸杀它没用因为它已经死了。要解决的是它的父进程——父进程调用wait()回收后僵尸自然消失。如果父进程不回收可以给父进程发信号让它处理或者重启父进程。如果是T状态说明被暂停了kill -CONT [pid]可以恢复它然后再正常终止。5.2 系统负载高但 CPU 不忙这是 D 状态进程的典型症状。uptime里的 load average 统计的是“运行态 不可中断睡眠态”的进程数所以一堆 D 状态进程会把负载拉高但 CPU 使用率可能很低。排查步骤ps -eo stat,pid,comm | grep ^D找出所有 D 状态进程。对每个 D 状态进程看/proc/[pid]/wchan确定等待点。如果是等磁盘 IO用iostat看设备如果是等网络文件系统检查网络和挂载点。如果是等内核锁可能需要perf或ftrace进一步分析。5.3 阻塞和挂起傻傻分不清记住一个判断口诀看它“等不等东西”。阻塞态进程一定在等某个事件IO、锁、信号wchan会显示具体的等待函数挂起态进程不一定在等什么它只是被暂停了wchan可能是空的或者显示调度相关函数。另一个判断维度是恢复方式阻塞态进程等的事件到了会自动恢复挂起态进程需要外部主动唤醒fg、bg、kill -CONT或者内存压力缓解后换回。5.4 常见问题速查表现象可能状态排查命令处理思路进程杀不死Dcat /proc/pid/wchan查底层 IO等 IO 完成进程杀不死Zps -eo pid,ppid,stat处理父进程回收僵尸进程杀不死Tps -eo pid,statkill -CONT恢复后终止负载高 CPU 低Dps -eo stat,pid,comm | grep D排查 IO 和存储进程突然不动Scat /proc/pid/wchan看等什么事件检查依赖内存紧张S/Dvmstat 1看 si/so检查 swap 使用考虑扩容5.5 几个我踩过的坑第一个坑以为S状态就是“正常等待”忽略了wchan。有次一个服务进程一直S我以为是正常等网络结果wchan显示卡在一个文件锁上是另一个进程持有锁没释放。所以看状态一定要结合wchan。第二个坑用kill -9处理 D 状态进程反复发信号。这不仅没用还可能因为信号队列堆积导致进程恢复后行为异常。正确做法是等或者从底层解决问题。第三个坑把T状态当成“卡死”。有次调试时进程停在T我以为是 bug其实是调试器断点导致的。T状态很多时候是人为的先确认有没有调试器 attach。第四个坑忽略VmSwap字段。有次排查性能问题进程状态看着正常但响应特别慢后来发现VmSwap很大进程被换出到 swap 了每次访问内存都要读磁盘。这种情况看状态是看不出来的得专门看 swap 指标。6. 从状态机到真实系统把知识用起来把运行、阻塞、挂起这三个状态吃透之后你会发现很多系统行为突然变得可解释了。比如为什么load average高不代表 CPU 忙为什么有些进程kill -9杀不掉为什么内存紧张时系统会“假死”——这些问题的答案都藏在进程状态机里。我个人的经验是排查进程相关问题时养成一个固定动作先看状态再看wchan最后看/proc细节。这三步下来80% 的问题都能定位到方向。剩下的 20%可能需要strace、perf、ftrace这些更重的工具但那是另一个话题了。最后分享一个我常用的小脚本一键输出所有非运行态进程的状态和等待点排查时特别省事#!/bin/bash # 列出所有非 R 状态进程的详细信息 ps -eo pid,ppid,stat,wchan:25,comm | awk $3 !~ /^R/ NR1 { printf PID: %-8s PPID: %-8s STAT: %-6s WCHAN: %-25s CMD: %s\n, $1, $2, $3, $4, $5 }这个脚本会过滤掉正常运行的进程把阻塞、挂起、僵尸等“异常”状态的进程列出来配合wchan字段一眼就能看出谁在等什么。我把它放在/usr/local/bin/下排查问题时随手就能用。进程状态这块知识看一遍文档只能记住概念真正理解得靠动手观察和踩坑。建议你找个测试环境把上面那几个实验都跑一遍亲眼看看状态怎么变、wchan怎么显示、kill什么时候有用什么时候没用。跑完这一轮你对 Linux 进程调度的理解会上一个台阶。

相关新闻

快手电脑版2026最新版Windows安装与兼容性深度指南

快手电脑版2026最新版Windows安装与兼容性深度指南

1. 项目概述:为什么“快手电脑版”安装这件事,远比看起来复杂得多“2026最新版快手电脑版下载与安装全攻略”这个标题,表面看是个再普通不过的软件安装教程,但作为连续三年深度参与多个主流短视频平台桌面端适配项目的从业者&…

2026/10/12 1:16:10 阅读更多 →
基于Java+SpringBoot+SSM的克州旅游网站开发实践与解析

基于Java+SpringBoot+SSM的克州旅游网站开发实践与解析

说实话,这几年接过不少旅游类的网站项目,但像克州这样地域特性极强的还是头一次。一开始拿到"基于JavaSpringBootSSM克州旅游网站"这个题目,我第一反应是:这又是一个典型的校园实训或者毕业设计项目。但深入了解之后才发…

2026/10/12 1:16:13 阅读更多 →
12GB显卡跑125B大模型:Strata引擎分层卸载与量化实战

12GB显卡跑125B大模型:Strata引擎分层卸载与量化实战

1. 大模型本地推理的显存经济学1.1 为什么125B模型能在12GB显卡上跑起来第一次看到“12GB显卡跑125B模型”这个说法,很多人的直觉反应是“不可能”。毕竟按照常规认知,一个千亿参数级别的模型,光是权重加载就需要几百GB显存,12GB连…

2026/10/12 1:16:16 阅读更多 →

最新新闻

联邦学习基础介绍:用 TaoToken 统一 Key 跑通本地模拟环境

联邦学习基础介绍:用 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 9:58:48 阅读更多 →
Redis能做消息队列吗?三种实现方案与可靠性边界全解析

Redis能做消息队列吗?三种实现方案与可靠性边界全解析

最近在技术群里看到一位朋友吐槽,说某大厂二面被问到一个看起来人畜无害的问题:“Redis 能做消息队列吗?怎么实现?”他条件反射答了一句“能用 List,LPUSH 配 BRPOP”,结果面试官就像连珠炮一样追问&#x…

2026/10/12 9:58:48 阅读更多 →
周志华《机器学习》习题5.5:标准BP与累积BP算法从零实现与对比

周志华《机器学习》习题5.5:标准BP与累积BP算法从零实现与对比

1. 从一道课后习题看BP算法的真正门槛很多人学机器学习,卡在神经网络这一章,不是因为公式看不懂,而是因为看懂了公式却不知道代码怎么写。周志华《机器学习》第五章习题5.5就是这样一个典型:它要求你基于标准BP算法和累积BP算法&a…

2026/10/12 9:58:48 阅读更多 →
Claude Code 源码架构深度解析(二):拆解 Agent Runtime 的 1729 行——queryLoop 与 Streaming Tool Execution 如何驱动 TaoToke

Claude Code 源码架构深度解析(二):拆解 Agent Runtime 的 1729 行——queryLoop 与 Streaming Tool Execution 如何驱动 TaoToke

/* 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 9:58:48 阅读更多 →
使用Trea配置SQLite数据库MCP,实现AI自动化数据处理|TaoToken统一Key接入实践

使用Trea配置SQLite数据库MCP,实现AI自动化数据处理|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 9:58:48 阅读更多 →
软件需求分析报告模板:从需求到验收的文档体系与避坑指南

软件需求分析报告模板:从需求到验收的文档体系与避坑指南

简介:这是一份可直接套用的软件需求分析报告模板PDF,适用于软件工程课程设计、项目文档编写以及开发团队规范需求阶段输出。文档覆盖范围、总体要求、需求分析、概要设计和详细设计等核心章节,并明确各环节的编制者、评审流程与格式要求&…

2026/10/12 9:57:46 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器: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/11 10:45:37 阅读更多 →
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/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练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/11 14:36:54 阅读更多 →