Linux init进程内核保护机制解析:为何kill -9 1无效及安全实验方法
在 Linux 系统管理中init进程通常是 PID 1是系统启动后由内核直接创建的第一个用户空间进程它负责启动和管理整个系统的服务、守护进程和运行级别。然而在某些极端场景下例如系统启动异常、进程僵死或进行深度系统调试时你可能会遇到需要“干掉”或替换init进程的情况。这绝非日常操作而是一项高风险、高权限的系统底层干预稍有不慎就会导致系统立即崩溃或无法启动。本文旨在从技术原理和操作实践的角度深入探讨 Linux 系统中init进程的生命周期、其不可被常规杀死的特性以及在特定条件下如何安全地终止、替换或调试它。我们将涵盖从SysV init到systemd的演变解释为什么kill -9 1通常无效并演示在可控环境如容器或虚拟机中进行相关实验的步骤。本文适合对 Linux 系统启动流程、进程管理和内核机制有浓厚兴趣并希望在隔离环境中进行探索的高级用户和系统开发者。1. 理解 init 进程为什么它如此特殊在动手之前必须彻底理解init进程的特殊地位否则任何操作都是盲目的。1.1 init 的核心职责与不可替代性init进程PID 1被内核赋予了几项独一无二的职责孤儿进程收养当一个进程的父进程先于其结束时这个“孤儿进程”会被init进程接管成为其新的父进程。init负责在其终止时回收资源防止僵尸进程积累。系统服务管理根据运行级别runlevel或目标target启动、停止和管理一系列系统服务如网络、日志、登录管理器。运行级别控制响应telinit或systemctl isolate等命令切换系统状态。信号处理处理某些特定的系统信号如SIGPWR电源故障或SIGINT控制台中断。由于其核心的“孤儿进程收养”职责由内核硬编码指定init进程一旦异常终止内核将无法为后续产生的孤儿进程找到合适的父进程这被视为一种严重的系统错误。因此内核设计了一套保护机制。1.2 内核的保护机制为什么kill -9 1无效尝试在终端执行kill -9 1你会看到类似Operation not permitted的提示。这并非权限不足即使你是 root而是内核的强制保护。Linux 内核为 PID 1 的进程设置了特殊的信号处理规则。对于SIGKILL信号 9和SIGSTOP信号 19这类不可捕获、不可忽略的信号内核会直接拒绝发送给init进程。这是为了防止系统因意外或恶意操作而瞬间崩溃。你可以通过一个小实验验证。编写一个简单的 C 程序让自己成为新的init这通常需要在容器内进行见后文然后尝试给自己发SIGKILL。// test_init_kill.c #include stdio.h #include stdlib.h #include unistd.h #include signal.h #include sys/types.h int main() { printf(My PID is: %d\n, getpid()); if (getpid() 1) { printf(I am init! Trying to kill myself with SIGKILL.\n); // 尝试向自己发送 SIGKILL if (kill(1, SIGKILL) -1) { perror(kill failed); } else { printf(Kill signal sent (this shouldn‘t happen).\n); } // 休眠以便观察 sleep(60); } return 0; }在真正的init位置运行此程序kill调用将会失败。这证明了内核级别的保护。1.3 从 SysV init 到 systemd目标的演变传统的SysV init是一个相对简单的脚本执行器。而现代的systemd则是一个庞大的服务管理系统它不仅是init还整合了日志、设备管理、网络配置等诸多功能。因此“干掉”systemd的影响范围远大于干掉传统的init。下表对比了两种 init 系统在面临“被终止”时的差异特性SysV init (如/sbin/init)systemd (如/usr/lib/systemd/systemd)进程结构基本是单进程或简单父子进程。核心是systemd进程管理大量systemd-journald,systemd-udevd等子进程。终止影响系统服务停止但可能留下许多孤儿进程。终端可能仍可操作但系统已半瘫痪。整个服务管理、日志、用户会话崩溃。系统通常会立即挂起或重启。替代方案可替换为systemd、Upstart或自定义简单 init。替换为其他 init 系统如SysV init、runit需要修改内核引导参数。调试难度相对简单结构清晰。复杂涉及多个协同进程。理解你系统上运行的init类型是第一步。可以通过以下命令确认# 查看 PID 1 的进程名 ps -p 1 -o comm # 或者查看指向哪个程序 ls -l /proc/1/exe # 对于 systemd 系统 systemctl --version | head -12. 实验环境搭建在安全沙箱中操作绝对不要在物理机或重要的生产虚拟机中尝试终止init进程。我们将使用 Linux 容器LXC/Docker或一个专门用于测试的虚拟机来创建一个隔离的沙箱环境。2.1 使用 Docker 容器创建最小化实验环境Docker 容器默认以 PID 命名空间隔离其内部的 PID 1 进程就是我们启动的容器主进程。这是一个完美的、无风险的实验场。首先我们创建一个运行普通进程的容器观察其 PID 1 的行为。# 启动一个运行 sleep 命令的容器它将成为容器内的 init docker run -d --name test-init-1 alpine:latest sleep 1d # 进入容器 docker exec -it test-init-1 /bin/sh # 在容器内查看进程 / # ps aux PID USER TIME COMMAND 1 root 0:00 sleep 1d 11 root 0:00 /bin/sh 17 root 0:00 ps aux # 尝试杀死 PID 1 (sleep 进程) / # kill -9 1 / # echo $? # 查看上一条命令的返回值 0 # 返回 0 表示 kill 命令本身执行成功发出了信号 # 但进程真的被杀了吗我们再看一下 / # ps aux PID USER TIME COMMAND 1 root 0:00 sleep 1d # 它还在SIGKILL 被忽略了。 11 root 0:00 /bin/sh 18 root 0:00 ps aux这个实验证明即使在容器内内核对于 PID 1 的SIGKILL保护依然有效。但容器内的init此处的sleep功能很简单没有收养孤儿进程的职责所以保护是内核的通用行为。2.2 使用特权容器模拟更真实的 init为了模拟真实init进程管理子进程的场景我们需要一个能运行多个进程且具有“收养”能力的容器。我们可以使用一个简单的多进程脚本作为 init。创建一个 Dockerfile# Dockerfile.custom-init FROM alpine:latest # 安装一个进程管理工具如 s6-overlay 或 dumb-init这里我们用 bash 脚本模拟 RUN apk add --no-cache bash # 创建一个自定义的 init 脚本 COPY my_init.sh /my_init.sh RUN chmod x /my_init.sh ENTRYPOINT [/my_init.sh]创建自定义 init 脚本my_init.sh#!/bin/bash # my_init.sh echo Custom Init (PID $$) starting... # 启动几个后台“服务” sleep 1000 service_pid1$! echo Started service 1 with PID $service_pid1 sleep 2000 service_pid2$! echo Started service 2 with PID $service_pid2 # 定义一个信号处理函数用于优雅退出 terminate() { echo Init received TERM signal. Stopping services... kill $service_pid1 $service_pid2 2/dev/null wait $service_pid1 $service_pid2 2/dev/null echo Init exiting. exit 0 } trap terminate SIGTERM SIGINT # 主循环等待子进程并回收僵尸进程 echo Init entering wait loop... while true; do # wait 命令会等待任何子进程状态改变并返回其 PID 和状态 if wait -n; then : # 子进程正常退出 else # wait 命令出错例如没有更多子进程可能是信号中断继续循环 sleep 1 fi done构建并运行这个自定义 init 容器# 构建镜像 docker build -t custom-init -f Dockerfile.custom-init . # 以特权模式运行并设置 PID 命名空间--pidhost 有时用于测试但这里我们用默认隔离 docker run -d --name custom-init-container --cap-addSYS_ADMIN custom-init # 进入容器查看 docker exec -it custom-init-container /bin/bash / # ps aux PID USER TIME COMMAND 1 root 0:00 /bin/bash /my_init.sh 7 root 0:00 sleep 1000 8 root 0:00 sleep 2000 13 root 0:00 /bin/bash 19 root 0:00 ps aux现在容器内有了一个功能更接近真实init的进程它启动了子进程并尝试回收它们。尝试在容器内kill -TERM 1发送 SIGTERM你会看到脚本中trap定义的优雅退出函数被触发服务被停止然后 init 退出。但kill -KILL 1依然会被内核阻止。3. “干掉” init 的可行方法与实战所谓“干掉”在技术上有几种含义1) 强制终止2) 优雅替换3) 调试干预。我们将分别探讨。3.1 方法一通过内核引导参数替换 init这是最正统、最安全的“替换” init 的方法。系统启动时内核会根据引导加载器如 GRUB传递的参数来启动第一个进程。操作步骤编辑 GRUB 配置文件。在大多数系统上是/etc/default/grub。找到GRUB_CMDLINE_LINUX_DEFAULT或GRUB_CMDLINE_LINUX行。添加init参数。例如你想用/bin/bash作为 init就添加init/bin/bash。# 示例将 quiet splash 参数替换 GRUB_CMDLINE_LINUX_DEFAULTquiet splash init/bin/bash更新 GRUB 配置。# 对于 Debian/Ubuntu sudo update-grub # 对于 RHEL/CentOS/Fedora sudo grub2-mkconfig -o /boot/grub2/grub.cfg重启系统。系统启动后内核将直接执行/bin/bash而不是原来的init。会发生什么系统将跳过所有正常的服务启动流程直接给你一个 root shell通常是在控制台。没有服务没有网络只有最基础的文件系统。这时你可以手动挂载文件系统、启动服务或者进行紧急修复。这本质上是一种“救援模式”。警告在此模式下/bin/bash成为了 PID 1。如果你在这个 shell 中执行exit内核没有其他进程可运行会触发kernel panic。这正是搜索热词中kernel panic attempted to kill init错误的典型场景。你需要先手动执行原始 init如/sbin/init或/usr/lib/systemd/systemd才能正常启动系统。3.2 方法二在运行时使用exec替换 init如果系统已经启动并且你有一个具有极高权限的 shell例如在单用户模式或通过sysrq获得理论上可以用exec命令替换当前进程包括 init的映像。exec命令会用指定的新程序替换当前进程的代码段、数据段等但PID 保持不变。如果当前进程是 PID 1那么你就“替换”了 init。高风险演示仅在隔离虚拟机中尝试首先通过SysRq魔术键获得一个 root shell。这需要内核支持并已启用。确保/proc/sys/kernel/sysrq值为1。按下AltSysRqE或AltPrintScreenE向所有进程发送 SIGTERM。按下AltSysRqI发送 SIGKILL对 init 无效。按下AltSysRqS同步磁盘。按下AltSysRqU卸载文件系统。最后按下AltSysRqB立即重启。这是获得一个相对干净状态的方法但不要在生产环境做。在一个专门用于测试的虚拟机中启动后进入 GRUB 菜单编辑启动项在linux行末尾添加single init/bin/bash进入单用户 bash shell。此时/bin/bash就是 PID 1。你可以尝试执行exec /sbin/init来切换回正常的 init 系统。# 当前是 bash 作为 PID 1 # ps aux 可能不工作因为 procfs 可能未挂载或服务未启动 mount -t proc proc /proc ps aux # 尝试替换为 systemd exec /usr/lib/systemd/systemd如果成功系统会继续正常的启动流程。如果失败系统会崩溃。3.3 方法三使用调试器gdb附着到 init 进程这并非“干掉”而是“干预”。通过调试器你可以暂停 init 进程检查其内存、线程状态甚至调用函数或修改变量。这通常用于深度调试 systemd 或其它 init 系统的内部问题。操作步骤需要调试符号和权限安装调试符号和gdb。# Ubuntu/Debian sudo apt-get install gdb systemd-sysv # RHEL/CentOS/Fedora sudo yum install gdb systemd-debuginfo由于init是特权进程需要以 root 身份并使用ptrace_scope控制。# 临时允许附着到任意进程 echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope使用gdb附着到 PID 1。sudo gdb -p 1在gdb中你可以进行各种调试操作(gdb) info threads # 查看所有线程 (gdb) bt # 查看调用栈 (gdb) call (void)exit(0) # 危险强制调用 exit(0)会导致内核 panic (gdb) detach # 安全地脱离进程 (gdb) quit极度危险警告在gdb中强制调用exit()或修改变量极有可能导致系统瞬间崩溃或数据损坏。此方法仅用于分析而非终止。4. 关联问题排查从热词看常见的 “init” 相关错误搜索热词中提到了许多与init相关的错误它们大多与“干掉 init”无关而是配置或环境问题。理解这些错误有助于从侧面理解init的职责。错误信息上下文根本原因解决方案conda error: run ‘conda init‘ before ‘conda activate‘Conda 环境管理Conda 没有正确初始化当前 shell 的配置。这里的init是 Conda 的一个子命令用于修改 shell 的 rc 文件如.bashrc与 PID 1 无关。运行conda init bash或zsh,fish然后重启 shell 或 source 对应配置文件。this application failed to start because no qt platform plugin could be initGUI 应用启动应用程序无法初始化 Qt 图形平台插件。通常是环境变量QT_QPA_PLATFORM设置错误或插件文件缺失。设置正确的环境变量如export QT_QPA_PLATFORMwayland或xcb并确保 Qt 库已安装。kernel panic attempted to kill init系统启动失败系统启动后期内核试图杀死 init 进程例如在关机时但 init 进程可能已经僵死或无法响应。或者在init指定的进程退出后内核无事可做。检查文件系统、驱动、init参数。使用 Live CD 检查根文件系统。error: repo is not installed. use “repo init” to install it here.Android 源码下载repo工具未初始化当前目录的代码仓库。这里的init是repo工具的子命令。运行repo init -u 仓库地址来初始化。pacman-key --initArch Linux 包管理初始化 Pacman 的密钥环。这是包管理系统的一部分。按照 Arch Wiki 的指南在安装或修复系统时运行此命令。windows 怎么修改一个 需要权限的init 文件Windows 系统Windows 没有 PID 1 的 init 概念。这里的init可能指某个软件的初始化文件。获取文件所有权、使用管理员权限的编辑器、或修改安全属性。5. 生产环境中的最佳实践与紧急恢复在生产环境中目标从来不是“干掉” init而是确保其高可用并准备好当其异常时的恢复手段。5.1 预防 init 问题保持系统更新及时更新内核和 init 系统如 systemd修复已知的崩溃或死锁 bug。监控 PID 1使用监控系统如 Prometheus node_exporter监控 systemd 进程的状态、资源使用率和套接字活动。使用看门狗Watchdog许多 init 系统包括 systemd支持硬件或软件看门狗。当 init 进程僵死时看门狗超时会导致硬件重启。对于 systemd查看RuntimeWatchdogSec和ShutdownWatchdogSec配置。合理的服务配置避免编写会阻塞或长时间占用 init 进程的服务单元文件。使用Typeforking或Typenotify的正确配置。5.2 当 init 僵死或异常时如何恢复如果系统无响应但网络可能还通SSH 连不上可以尝试以下序列魔法键 SysRq这是第一道救命符。尝试AltSysRqR将键盘从原始模式恢复然后AltSysRqE给所有进程发 SIGTERM最后AltSysRqS和AltSysRqU同步并卸载文件系统。如果还不行AltSysRqB强制重启。串口控制台对于服务器配置串口控制台consolettyS0内核参数可以在网络和图形都失效时提供访问。远程管理接口IPMI、iDRAC、iLO 等带外管理工具可以远程执行电源循环、访问虚拟控制台是最终手段。从救援介质启动准备一个 USB 救援盘如 SystemRescueCd。从救援盘启动挂载原系统根分区检查日志 (/var/log/messages,journalctl -b-1查看上次启动日志)修复配置或文件系统。5.3 关键检查清单当系统启动失败并出现与 init 相关的错误时按此清单排查[ ]检查内核参数在 GRUB 菜单中检查是否有异常的init、rdinit或systemd.unit参数。[ ]检查文件系统使用fsck检查根文件系统和关键分区。[ ]检查 init 二进制文件在救援模式下检查/sbin/init或/usr/lib/systemd/systemd文件是否损坏、权限是否正确。[ ]检查依赖库使用ldd命令检查 init 程序的动态链接库是否完整。[ ]检查/etc/fstab确保没有错误的挂载项导致启动卡住。[ ]检查 SELinux/AppArmor在某些情况下安全策略可能阻止 init 启动子进程。尝试在救援模式下禁用或设置为宽容模式。[ ]查看最后日志在救援模式下挂载原系统分区查看/var/log/boot.log和 systemd 日志。理解 init 进程的不可杀死性本质上是理解 Linux 内核为维持系统稳定性所设定的底线。在日常运维中我们应专注于如何保障 init 的稳定运行而非如何终止它。在必须进行底层调试或灾难恢复时通过内核参数替换、在高度受控的环境如容器中实验或使用调试器进行分析才是安全且有效的方法。掌握这些高级技巧能让你在面对最棘手的系统启动问题时有更清晰的排查思路和更充足的应对信心。

相关新闻

多角色编排:构建可扩展轻量级GUI智能体的核心技术解析

多角色编排:构建可扩展轻量级GUI智能体的核心技术解析

1. 项目概述:从“单打独斗”到“角色协同”的GUI智能体进化如果你最近在关注AI与图形用户界面(GUI)自动化的交叉领域,那么“可扩展的轻量级GUI智能体”这个概念一定不陌生。传统的GUI自动化脚本,无论是基于图像识别还是…

2026/8/24 1:08:30 阅读更多 →
具身智能评测体系:从基础能力到仿真迁移的全面评估框架

具身智能评测体系:从基础能力到仿真迁移的全面评估框架

最近在跟进几个具身智能相关的开源项目,发现一个挺有意思的现象:很多团队在模型训练和算法优化上投入巨大,模型在仿真环境里跑得飞快,动作流畅得让人惊叹。但一旦你问:“这个模型到底有多‘智能’?和另一个…

2026/8/22 21:01:21 阅读更多 →
华为OD机试红黑图算法解析与Java/Go实现

华为OD机试红黑图算法解析与Java/Go实现

1. 项目概述:华为OD机试与红黑图算法挑战华为OD(Outstanding Developer)机试是华为面向全球开发者推出的技术能力测评体系,其C卷作为中高级难度题库,常包含数据结构与算法的综合应用题型。"红黑图"作为2026年…

2026/8/24 4:38:32 阅读更多 →

最新新闻

灰色预测模型GM(1,1)原理、实战与数学建模应用指南

灰色预测模型GM(1,1)原理、实战与数学建模应用指南

1. 项目概述:从“信息贫瘠”到“小样本预测”的利器如果你参加过数学建模竞赛,或者在工作中处理过数据量少、信息不完全的预测问题,大概率听过“灰色模型”这个名字。我第一次接触它是在准备一场区域性的建模比赛,当时手头只有寥寥…

2026/8/24 9:23:43 阅读更多 →
数字孪生与算力网络驱动的高效异构LLM具身智能体协同系统

数字孪生与算力网络驱动的高效异构LLM具身智能体协同系统

1. 项目概述:当具身智能体遇上算力网络与数字孪生最近在搞一个挺有意思的项目,核心是解决一群“异构”的大型语言模型(LLM)具身智能体(Embodied Agents)在复杂环境里高效协同的问题。听起来有点绕&#xff…

2026/8/24 9:23:43 阅读更多 →
AI智能体记忆模型设计:从向量检索到统一记忆架构的演进

AI智能体记忆模型设计:从向量检索到统一记忆架构的演进

1. 项目概述:当AI智能体需要“记忆”时,我们谈什么?如果你最近在捣鼓AI智能体(AI Agent),无论是用LangChain、AutoGPT还是自己手搓框架,大概率都遇到过同一个头疼的问题:“记忆”太短…

2026/8/24 9:23:43 阅读更多 →
车灯线光源优化设计:从光线追迹到约束优化的工程实践

车灯线光源优化设计:从光线追迹到约束优化的工程实践

1. 项目概述:一个经典的工程优化问题2002年的全国大学生数学建模竞赛A题“车灯线光源的优化设计”,对于很多经历过那个年代的理工科学生,尤其是车辆工程、光学工程和应用数学背景的朋友来说,绝对是一个绕不开的经典案例。它不像现…

2026/8/24 9:23:43 阅读更多 →
chan_sip还是chan_pjsip?Browser Phone适配Asterisk的2种配置方案深度对比

chan_sip还是chan_pjsip?Browser Phone适配Asterisk的2种配置方案深度对比

chan_sip还是chan_pjsip?Browser Phone适配Asterisk的2种配置方案深度对比 【免费下载链接】Browser-Phone A fully featured browser based WebRTC SIP phone for Asterisk 项目地址: https://gitcode.com/gh_mirrors/br/Browser-Phone Browser Phone 是一款…

2026/8/24 9:23:43 阅读更多 →
2026年福建做智慧排水监测系统的公司前10名有哪些?

2026年福建做智慧排水监测系统的公司前10名有哪些?

台风中心刚在福建沿海登陆,福州城区的雨势却没有立刻减弱,天文大潮正把闽江水顶进雨水排口,管网液位在短时间内快速抬升,调度大屏上的监测点陆续变红。这样的场景,福建沿海城市每年汛期都可能遇到——暴雨和潮水同时到…

2026/8/24 9:22:42 阅读更多 →

日新闻

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践

前端内容安全与依赖审计实践 前端安全依赖分层防护。没有任何单一配置能替代输出编码、权限校验和依赖更新。 把不可信内容当作数据 默认使用框架的转义能力;确需渲染 HTML 时,先在服务端或可信的客户端库中进行白名单过滤。避免把用户输入直接赋给 inne…

2026/8/24 1:08:15 阅读更多 →
Windows登录密码存储机制全解析:从哈希算法到安全加固实战

Windows登录密码存储机制全解析:从哈希算法到安全加固实战

1. 项目概述:Windows登录密码的“黑匣子”每次你按下CtrlAltDel,输入密码,然后看到那个熟悉的桌面,这背后发生了一系列复杂而精密的操作。作为一名长期与Windows系统打交道的从业者,我经常被问到:“我的密码…

2026/8/24 1:08:15 阅读更多 →
AI面试系统安全挑战与解决方案

AI面试系统安全挑战与解决方案

1. 项目概述:AI面试系统的安全挑战去年参与某跨国企业AI面试系统部署时,遇到一个典型案例:候选人在视频面试中无意提到竞争对手产品名称,系统竟自动将该信息关联到企业知识库并生成竞品分析报告。这个看似"智能"的功能&…

2026/8/24 1:08:15 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/24 0:06:02 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/24 0:20:20 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/24 0:14:11 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/23 18:47:06 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →