当前位置: 首页 > article >正文

TLPI 第12章 读书笔记:System and Process Information

笔记和练习博客总目录见开始读TLPI。在本章中我们研究访问各种系统和进程信息的方法。本章的主要重点是讨论 /proc 文件系统。我们还描述了 uname() 系统调用该调用用于检索各种系统标识符。12.1 The /proc File System在早期的 UNIX 实现中通常没有简便的方法可以自省地分析或更改内核的属性以回答如下问题系统上有多少进程在运行它们的所有者是谁一个进程打开了哪些文件当前哪些文件被锁定哪些进程持有这些锁系统上使用了哪些套接字一些早期的 UNIX 实现通过允许特权程序深入内核内存中的数据结构来解决这个问题。然而这种方法存在各种问题。特别是它需要对内核数据结构有专业知识并且这些结构可能会随内核版本的变化而变化这就要求依赖这些结构的程序必须被重写。为了提供更方便的内核信息访问许多现代 UNIX 实现提供了/proc 虚拟文件系统。该文件系统位于 /proc 目录下包含各种暴露内核信息的文件允许进程方便地读取这些信息并在某些情况下使用普通文件 I/O 系统调用进行更改。/proc 文件系统被称为虚拟文件系统是因为它包含的文件和子目录并不存储在磁盘上。相反内核会在进程访问它们时“即时”创建这些文件和目录。在本节中我们概述 /proc 文件系统。在后续章节中我们将描述与每章主题相关的具体 /proc 文件。尽管许多 UNIX 实现提供了 /proc 文件系统但 SUSv3 并未指定该文件系统本书描述的细节是特定于 Linux 的。12.1.1 Obtaining Information About a Process: /proc/PlD对于系统上的每个进程内核都会提供一个对应的目录名为 /proc/PID其中 PID 是该进程的 ID。在这个目录中有各种文件和子目录包含关于该进程的信息。例如我们可以通过查看 /proc/1 目录下的文件来获取关于 init 进程的信息该进程的进程 ID 始终为 1。在每个 /proc/PID 目录中的文件中有一个名为 status 的文件它提供了关于该进程的一系列信息$cat/proc/1/status Name: systemd# Name of command run by this processUmask: 0000 State: S(sleeping)# State of this processTgid:1# Thread group ID (traditional PID, getpid())Ngid:0Pid:1# Actually, thread ID (gettid())PPid:0# Parent process IDTracerPid:0# PID of tracing process (0 if not traced)Uid:0000# Real, effective, saved set, and FS UIDsGid:0000# Real, effective, saved set, and FS GIDsFDSize:128# # of file descriptor slots currently allocatedGroups:# Supplementary group IDsNStgid:1NSpid:1NSpgid:1NSsid:1VmPeak:239548kB# Peak virtual memory sizeVmSize:174012kB# Current virtual memory sizeVmLck:0kB# Locked memoryVmPin:0kB VmHWM:16548kB# Peak resident set sizeVmRSS:16548kB# Current resident set sizeRssAnon:5436kB RssFile:11112kB RssShmem:0kB VmData:21188kB# Data segment sizeVmStk:132kB# Stack sizeVmExe:44kB# Text (executable code) sizeVmLib:12824kB# Shared library code sizeVmPTE:104kB# Size of page table (since 2.6.10)VmSwap:0kB HugetlbPages:0kB CoreDumping:0THP_enabled:1Threads:1# # of threads in this thread’s thread groupSigQ:1/13600# Current/max. queued signals (since 2.6.12)SigPnd: 0000000000000000# Signals pending for threadShdPnd: 0000000000000000# Signals pending for process (since 2.6)SigBlk: 7fe3c0fe28014a03# Blocked signalsSigIgn: 0000000000001000# Ignored signalsSigCgt: 00000001000004ec# Caught signalsCapInh: 0000000000000000# Inheritable capabilitiesCapPrm: 000001ffffffffff# Permitted capabilitiesCapEff: 000001ffffffffff# Effective capabilitiesCapBnd: 000001ffffffffff# Capability bounding set (since 2.6.26)CapAmb: 0000000000000000 NoNewPrivs:0Seccomp:0Seccomp_filters:0Speculation_Store_Bypass: vulnerable SpeculationIndirectBranch: always enabled Cpus_allowed: 1f# CPUs allowed, mask (since 2.6.24)Cpus_allowed_list:0-4# Same as above, list format (since 2.6.26)Mems_allowed: 00000000,...,00000001# Memory nodes allowed, mask (since 2.6.24)Mems_allowed_list:0# Same as above, list format (since 2.6.26)voluntary_ctxt_switches:3800# Voluntary context switches (since 2.6.23)nonvoluntary_ctxt_switches:35000# Involuntary context switches (since 2.6.23)以上输出来自内核 5.15.0。如伴随该文件输出的备注中所示该文件的格式随着时间演变在各个内核版本中添加了新字段在少数情况下也删除了部分字段。(除了上文提到的 Linux 2.6 变化外Linux 2.4 添加了 Tgid、TracerPid、FDSize 和 Threads 字段。)$cat/proc/version Linux version5.15.0-314.193.5.5.el9uek.x86_64(mockbuildhost-100-100-224-97)(gcc(GCC)11.5.020240719(Red Hat11.5.0-11.0.1), GNU ld version2.35.2-67.0.1.el9)#2 SMP Fri Nov 28 07:05:37 PST 2025这个文件内容随时间变化的事实提出了一个关于使用 /proc 文件的一般性问题当这些文件包含多个条目时我们应该采取防御性解析——在这种情况下应查找包含特定字符串的行例如 PPid:的匹配而不是按逻辑行号处理文件。表 12-1 列出了每个 /proc/PID目录中发现的一些其他文件。Table 12-1: Selected files in each /proc/PID directoryFileDescription (process attribute)cmdlineCommand-line arguments delimited by \0cwdSymbolic link to current working directoryenvironEnvironment list NAMEvalue pairs, delimited by \0exeSymbolic link to file being executedfdDirectory containing symbolic links to files opened by this processmapsMemory mappingsmemProcess virtual memory (must lseek() to valid offset before I/O)mountsMount points for this processrootSymbolic link to root directorystatusVarious information (e.g., process IDs, credentials, memory usage, signals)taskContains one subdirectory for each thread in process (Linux 2.6)The /proc/PID/fd directory/proc/PID/fd 目录包含该进程打开的每个文件描述符的一个符号链接。每个符号链接的名称与描述符编号相匹配例如/proc/1968/1 是进程 1968 的标准输出的符号链接。更多信息请参阅第 5.11 节。为了方便任何进程都可以使用符号链接 /proc/self 访问其自身的 /proc/PID 目录。$ls/proc/self/fd0123Threads: the /proc/PID/task directoryLinux 2.4 引入了线程组的概念以正确支持 POSIX 线程模型。由于线程组中的线程有些属性是不同的Linux 2.4 在 /proc/PID 目录下添加了一个任务子目录。对于该进程中的每个线程内核提供一个名为 /proc/PID/task/TID 的子目录其中 TID 是该线程的线程 ID。这与在该线程中调用 gettid() 返回的编号相同。12.1.2 System Information Under /proc/proc 下的各种文件和子目录提供了对系统范围信息的访问。下面的图 12-1 显示了一些这些内容。图 12-1 中显示的许多文件在本书其他地方有描述。表 12-2 总结了图 12-1 中显示的 /proc 子目录的总体用途。Table 12-2: Purpose of selected /proc subdirectoriesDirectoryInformation exposed by files in this directory/procVarious system information/proc/netStatus information about networking and sockets/proc/sys/fsSettings related to file systems/proc/sys/kernelVarious general kernel settings/proc/sys/netNetworking and sockets settings/proc/sys/vmMemory-management settings/proc/sysvipcInformation about System V IPC objects12.1.3 Accessing /proc Files/proc 下的文件通常通过 shell 脚本访问大多数包含多个值的 /proc 文件可以很容易地使用诸如 Python 或 Perl 之类的脚本语言解析。例如我们可以使用 shell 命令修改和查看 /proc 文件的内容如下所示$cat/proc/sys/kernel/pid_max4194304$echo4194303/proc/sys/kernel/pid_max $cat/proc/sys/kernel/pid_max4194303$echo4194304/proc/sys/kernel/pid_max/proc 文件也可以通过程序使用常规文件 I/O 系统调用来访问。访问这些文件时有一些限制一些 /proc 文件是只读的也就是说它们仅用于显示内核信息不能用于修改这些信息。这适用于大多数 /proc/PID 目录下的文件。一些 /proc 文件只能由文件所有者或特权进程读取。例如/proc/PID 下的所有文件都属于拥有相应进程的用户并且在这些文件中的某些文件如 /proc/PID/environ读取权限仅授予文件所有者。除了 /proc/PID 子目录中的文件外/proc 下的大多数文件归 root 所有并且可修改的文件只能由 root 修改。图略Figure 12-1: Selected files and subdirectories under /procAccessing files in /proc/PID/proc/PID 目录是易失性的。这些目录中的每一个都会在具有相应进程 ID 的进程创建时出现并在该进程终止时消失。这意味着如果我们确定某个特定的 /proc/PID 目录存在那么当我们试图打开该目录下的某个文件时需要妥善处理这种情况即该进程可能已经终止并且相应的 /proc/PID 目录在我们打开文件之前就已经被删除了。Example program清单 12-1 演示了如何读取和修改 /proc 文件。该程序读取并显示 /proc/sys/kernel/pid_max 的内容。如果提供了命令行参数程序将使用该值更新该文件。此文件在 Linux 2.6 中新增指定了进程 ID 的上限第 6.2 节。以下是使用该程序的一个示例$cat/proc/sys/kernel/pid_max4194304$ ./procfs_pidmax4194304$ ./procfs_pidmax4000000Old value:4194304/proc/sys/kernel/pid_max now contains4000000Listing 12-1: Accessing /proc/sys/kernel/pid_max// sysinfo/procfs_pidmax.c// 代码略if(argc1){if(lseek(fd,0,SEEK_SET)-1)errExit(lseek);if(write(fd,argv[1],strlen(argv[1]))!(ssize_t)strlen(argv[1]))fatal(write() failed);...} /proc文件系统一定不同于一般的文件系统否则无法理解write一个宽度较小的值何以能覆盖宽度较大的值或者反之。因为/proc是一个虚拟文系统/proc/sys/kernel/pid_max 本质上是一个内核变量接口不是真正的文件。写入时内核只是从中提取数值不关心字符串长度是否一致因此不同长度的字符串完全没问题。12.2 System Identification: uname()uname() 系统调用返回关于应用程序运行的主机系统的一系列识别信息这些信息保存在 utsbuf 指向的结构中。#includesys/utsname.hintuname(structutsname*utsbuf);utsbuf 参数是指向 utsname 结构的指针该结构定义如下#define_UTSNAME_LENGTH65structutsname{charsysname[_UTSNAME_LENGTH];/* Implementation name */charnodename[_UTSNAME_LENGTH];/* Node name on network */charrelease[_UTSNAME_LENGTH];/* Implementation release level */charversion[_UTSNAME_LENGTH];/* Release version level */charmachine[_UTSNAME_LENGTH];/* Hardware on which system is running */#ifdef_GNU_SOURCE/* Following is Linux-specific */chardomainname[_UTSNAME_LENGTH];/* NIS domain name of host */#endif};SUSv3 指定了 uname()但未定义 utsname 结构中各个字段的长度仅要求字符串以空字节终止。在 Linux 上这些字段的长度均为 65 字节包括用于终止空字节的空间。在一些 UNIX 实现中这些字段较短在其他实现例如 Solaris中字段长度可达 257 字节。utsname 结构的 sysname、release、version 和 machine 字段由内核自动设置。在 Linux 中目录 /proc/sys/kernel 中的三个文件提供了与 utsname 结构的 sysname、release 和 version 字段返回的信息相同的访问权限。这些只读文件分别是 ostype、osrelease 和 version。另一个文件 /proc/version 包含这些文件中的相同信息同时还包括关于内核编译步骤的信息即执行编译的用户名称、进行编译的主机名称以及使用的 gcc 版本。nodename 字段返回使用 sethostname() 系统调用设置的值有关此系统调用的详细信息请参阅手册页。通常这个名字类似于系统 DNS 域名的主机名前缀。domainname 字段返回使用 setdomainname() 系统调用设置的值有关此系统调用的详细信息请参阅手册页。这是主机的网络信息服务NIS域名这与主机的 DNS 域名不同。gethostname() 系统调用是 sethostname() 的反向操作用于检索系统主机名。系统主机名也可以使用 hostname(1) 命令和 Linux 特有的 /proc/hostname 文件进行查看和设置。getdomainname() 系统调用是 setdomainname() 的反向操作用于检索 NIS 域名。NIS 域名也可以使用 domainname(1) 命令和 Linux 特有的 /proc/domainname 文件进行查看和设置。sethostname() 和 setdomainname() 系统调用在应用程序中很少使用。通常主机名和 NIS 域名在启动时由启动脚本设置。清单 12-2 中的程序显示了 uname() 返回的信息。运行该程序时我们可能会看到如下示例输出$ ./t_uname Node name: ol9-vagrant System name: Linux Release:5.15.0-314.193.5.5.el9uek.x86_64 Version:#2 SMP Fri Nov 28 07:05:37 PST 2025Machine: x86_64 Domain name:(none)Listing 12-2: Using uname()// sysinfo/t_uname.c// 代码略12.3 Summary/proc 文件系统向应用程序公开了一系列内核信息。每个 /proc/PID 子目录包含提供与 PID 匹配的进程信息的文件和子目录。/proc 下的其他各种文件和目录公开系统范围的信息程序可以读取这些信息并且在某些情况下可以修改这些信息。uname() 系统调用允许我们发现 UNIX 的实现以及应用程序运行的机器类型。Further information关于 /proc 文件系统的更多信息可以在 proc(5) 手册页、内核源文件 Documentation/filesystems/proc.txt 中以及 Documentation/sysctl 目录中的各种文件中找到。12.4 Exercises参见TLPI 第12章 练习System and Process Information。

相关文章:

TLPI 第12章 读书笔记:System and Process Information

笔记和练习博客总目录见:开始读TLPI。 在本章中,我们研究访问各种系统和进程信息的方法。本章的主要重点是讨论 /proc 文件系统。我们还描述了 uname() 系统调用,该调用用于检索各种系统标识符。 12.1 The /proc File System 在早期的 UNI…...

3步掌握AutoHotkey脚本编译核心技巧:从源码到独立EXE的实战指南

3步掌握AutoHotkey脚本编译核心技巧:从源码到独立EXE的实战指南 【免费下载链接】Ahk2Exe Official AutoHotkey script compiler - written itself in AutoHotkey 项目地址: https://gitcode.com/gh_mirrors/ah/Ahk2Exe 你是否曾经为分享AutoHotkey脚本而烦恼…...

C++ MCP网关从3万到87万RPS的跃迁之路(工业级网关压测全链路复盘)

更多请点击: https://intelliparadigm.com 第一章:C MCP网关从3万到87万RPS的跃迁之路(工业级网关压测全链路复盘) 在超低延迟金融交易与高频物联网接入场景中,我们重构了基于 C20 的 MCP(Message Control…...

并发编程(10)-收尾

JMM基础-计算机原理 操作 响应时间 打开一个站点 几秒 数据库查询一条记录(有索引) 十几毫秒 1.6G的CPU执行一条指令 0.6纳秒 从机械磁盘顺序读取1M数据 2-10毫秒 从SSD磁盘顺序读取1M数据 0.3毫秒 从内存连续读取1M数据 250微秒 CPU读取一次内存 100纳秒 1G网卡,网络传输2k…...

精读双模态检测系列十九|大湾区大学 港理工 澳门理工IEEE TIP 2025 FusionMamba 封神!Mamba 动态特征增强 SOTA,检测 mAP 暴涨 13.8%!

🔥 本文定位:CSDN 原创硬核干货 | 多模态融合 YOLO 下游任务全适配🎯 核心收益:一次性解决多模态图像融合四大行业顽疾 ——CNN 局部感受野受限、Transformer 计算量爆炸、模态互补信息挖掘不足、局部纹理细节丢失!基…...

Botty:暗黑破坏神2重制版的智能游戏自动化解决方案

Botty:暗黑破坏神2重制版的智能游戏自动化解决方案 【免费下载链接】botty D2R Pixel Bot 项目地址: https://gitcode.com/gh_mirrors/bo/botty 在暗黑破坏神2重制版的重复性刷怪、物品收集和路径规划任务中,手动操作不仅耗时耗力,还容…...

补单系统搭建及源码分享

补单系统是一套基于云计算服务平台构建的电商补单解决方案,旨在帮助电商企业实时识别商品库存与交付状态,并自动完成订单补偿操作。抢单前台采用前后端分离架构,支持多设备、多系统平台及跨平台接入。以下为补单APP系统开发的源码搭建方案。1…...

视频字幕提取终极指南:如何用本地AI工具快速生成SRT字幕文件

视频字幕提取终极指南:如何用本地AI工具快速生成SRT字幕文件 【免费下载链接】video-subtitle-extractor 视频硬字幕提取,生成srt文件。无需申请第三方API,本地实现文本识别。基于深度学习的视频字幕提取框架,包含字幕区域检测、字…...

【无人机三维路径规划】基于动物迁徙算法AMO实现复杂地形无人机避障三维航迹规划附Matlab代码

🔥 内容介绍摘要无人机三维路径规划在复杂地形环境中面临着避障和全局最优解搜索的双重挑战。本文提出了一种基于动物迁徙算法(AMO)的无人机三维避障路径规划方法。该方法利用AMO算法的全局搜索能力和局部寻优能力,有效地解决了复…...

2025_NIPS_Visual Anchors Are Strong Information Aggregators For Multimodal Large Language Model

文章核心总结与翻译 一、主要内容 本文聚焦多模态大语言模型(MLLMs)中的视觉-语言连接器设计,核心目标是在提升模型精度的同时降低计算成本。现有连接器(如Q-Former、Perceiver Resampler)存在依赖海量训练数据、固定查询导致信息丢失等问题。 研究通过分析视觉Transfo…...

如何在网站中完美显示数学公式:MathJax 4.0终极配置指南

如何在网站中完美显示数学公式:MathJax 4.0终极配置指南 【免费下载链接】MathJax Beautiful and accessible math in all browsers 项目地址: https://gitcode.com/gh_mirrors/ma/MathJax 还在为网站中的数学公式显示问题烦恼吗?无论是学术论文、…...

iFEM深度解析:MATLAB自适应有限元方法框架的性能突破

iFEM深度解析:MATLAB自适应有限元方法框架的性能突破 【免费下载链接】ifem iFEM is a MATLAB software package containing robust, efficient, and easy-following codes for the main building blocks of adaptive finite element methods on unstructured simpl…...

web前端知识点总结2026(六)

web前端知识点总结2026(六)1. vue项目重构到react项目一、核心语法重构1)模板语法重构(Vue template → React JSX)2) 响应式状态重构3)生命周期重构4)计算属性重构5)事件…...

GoWxDump:如何快速实现微信聊天记录的深度取证分析?

GoWxDump:如何快速实现微信聊天记录的深度取证分析? 【免费下载链接】GoWxDump 删库 项目地址: https://gitcode.com/gh_mirrors/go/GoWxDump 在数字化时代,社交媒体数据已成为数字取证领域的重要证据来源。微信作为中国最主流的即时通…...

DeepTutor:基于智能体原生架构的个性化AI学习伴侣部署与实战指南

1. 项目概述:一个“原生智能体”驱动的个性化学习伴侣如果你正在寻找一个不仅仅是聊天机器人,而是一个能真正理解你的学习进度、拥有独立“人格”并能主动规划学习路径的AI导师,那么DeepTutor的出现,可能标志着一个新阶段的开始。…...

读2025世界前沿技术发展报告51干细胞

1. 干细胞1.1. 干细胞是构成人体器官和组织的所有特化细胞的来源,能够分化为人体所有具有特定功能的细胞1.2. 干细胞能够维持长期的自我更新、自我复制和分裂,这种能力使其在治疗应用中具有很高的价值,尤其对于血液、皮肤、肠道等不断自我更新…...

无人机航拍小目标检测太难?YOLO-MARS 一招搞定,精度暴涨 8.1%!

点击蓝字关注我们关注并星标从此不迷路计算机视觉研究院公众号ID|计算机视觉研究院学习群|扫码在主页获取加入方式https://pmc.ncbi.nlm.nih.gov/articles/PMC12031147/pdf/sensors-25-02534.pdf计算机视觉研究院专栏Column of Computer Vision Institut…...

EVE-NG仿真模拟器从零部署与核心应用实战指南

1. EVE-NG仿真模拟器入门指南 第一次听说EVE-NG这个工具时,我正为如何搭建一个安全的网络实验环境发愁。作为网络工程师,我们经常需要测试各种网络配置,但在真实设备上操作风险太大,稍有不慎就可能造成网络中断。EVE-NG完美解决了…...

圣女司幼幽-造相Z-Turbo惊艳效果:清冷神性眉峰+淡金柔光背景生成实录

圣女司幼幽-造相Z-Turbo惊艳效果:清冷神性眉峰淡金柔光背景生成实录 1. 惊艳效果预览:当AI遇见东方神性美学 想象一下,一位身着墨绿长裙的圣女,手持冷冽长剑,眉宇间透着清冷神性,背景笼罩在淡金色柔光中—…...

文件被占用无法删除?5招轻松解决

删除文件/文件夹提示在另一程序打开?几个快速解决方法 是不是经常都遇到这种,想要删除一个文件或者文件夹的时候,系统突然弹出提示“文件正在被另一程序使用”,或者“已在某个程序中打开”,导致无法删除。看似很难其实…...

【DataWhale组队学习】DIY-LLM Task1分词器

原文链接 0. 引言:为什么要学分词器 分词器常被视为LLM的一部分,但它其实有独立的训练生命周期。 Tokenizer本质上是将原始文本转换为模型可处理的离散符号序列的组件,它可以决定模型看到世界的基本粒度:是字符、单词、子词&am…...

MATLAB图表导出专业指南:export_fig工具箱深度实战

MATLAB图表导出专业指南:export_fig工具箱深度实战 【免费下载链接】export_fig A MATLAB toolbox for exporting publication quality figures 项目地址: https://gitcode.com/gh_mirrors/ex/export_fig MATLAB export_fig是科研和工程可视化领域的专业图像…...

AI编程游戏化:Claude-Code-Game-Studios项目解析与实践

1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目,叫“Donchitos/Claude-Code-Game-Studios”。光看名字,你可能会觉得这是个游戏开发工作室的代码库,或者是什么大型游戏引擎。但点进去仔细研究后,我发现它的核心玩法其…...

OpenPLC Editor:免费开源的工业自动化编程终极指南 [特殊字符]

OpenPLC Editor:免费开源的工业自动化编程终极指南 🚀 【免费下载链接】OpenPLC_Editor 项目地址: https://gitcode.com/gh_mirrors/ope/OpenPLC_Editor 你是否曾为高昂的PLC编程软件授权费用而烦恼?是否想寻找一款功能强大、完全免费…...

闲鱼自动化采集系统终极指南:从零搭建高效商品监控方案

闲鱼自动化采集系统终极指南:从零搭建高效商品监控方案 【免费下载链接】idlefish_xianyu_spider-crawler-sender 闲鱼自动抓取/筛选/发送系统,xianyu spider crawler blablabla 项目地址: https://gitcode.com/gh_mirrors/id/idlefish_xianyu_spider-…...

servlet笔记

1.servlet执行流程2.servlet生命周期稍微看一下吧,虽然也看不懂是什么...

【RAG】【vector_stores097】Timescale Vector Store 演示分析

1. 案例目标本案例演示如何使用Timescale Vector作为LlamaIndex的向量存储后端,实现高效的向量相似性搜索和时间过滤功能。主要目标包括:展示Timescale Vector与LlamaIndex的集成方法演示基础向量相似性搜索功能实现基于时间范围的向量过滤查询创建和管理…...

【RAG】【vector_stores096】TiDB向量存储示例分析

1. 案例目标本案例展示了如何使用TiDB Cloud的向量搜索功能与LlamaIndex集成,实现高效的文档检索和语义搜索。TiDB Serverless将内置的向量搜索集成到MySQL生态系统中,使用户无需额外的数据库或技术栈即可开发AI应用程序。2. 技术栈与核心依赖LlamaIndex…...

终极指南:如何用KKManager轻松管理Illusion游戏模组,告别混乱安装

终极指南:如何用KKManager轻松管理Illusion游戏模组,告别混乱安装 【免费下载链接】KKManager Mod, plugin and card manager for games by Illusion that use BepInEx 项目地址: https://gitcode.com/gh_mirrors/kk/KKManager KKManager是一款专…...

第27篇:PyTorch动态图 vs TensorFlow静态图——深度框架核心机制对比(原理解析)

文章目录现象引入:一次让我“怀疑人生”的调试经历提出问题:动与静,本质区别在哪?原理剖析:深入静态图与动态图的引擎舱静态计算图(以TensorFlow 1.x为典型)动态计算图(以PyTorch为典…...