当前位置:首页>Linux>Linux进程创建底层解密:fork到底做了什么?写时复制(Copy-On-Write)原理精讲

Linux进程创建底层解密:fork到底做了什么?写时复制(Copy-On-Write)原理精讲

  • 2026-02-05 01:00:24
Linux进程创建底层解密:fork到底做了什么?写时复制(Copy-On-Write)原理精讲

在Linux系统中,进程是资源调度的基本单位,而fork()是创建新进程的核心系统调用。很多开发者只知道fork()能“复制”一个进程,却对其底层实现、资源复制的细节以及写时复制(Copy-On-Write,COW)的优化机制一知半解。本文将从底层原理出发,拆解fork()的执行流程,精讲写时复制的核心思想,再结合C语言、Python的实际案例,让你彻底掌握进程创建的底层逻辑。

一、Linux进程的核心标识:PID与PCB

要理解fork(),首先要明确Linux中进程的核心管理机制——PIDPCB

  • PID(Process ID)
    :进程的唯一数字标识,Linux通过PID区分不同进程,每个进程都有独立的PID,子进程的PID由内核动态分配,且与父进程不同。
  • PCB(Process Control Block,进程控制块)
    :内核为每个进程维护的核心数据结构(Linux中具体为task_struct),包含了进程的所有关键信息——PID、内存映射、文件描述符、寄存器状态、优先级等。PCB是进程存在的唯一标志,内核通过管理PCB实现对进程的调度、资源分配和生命周期管理。

简单来说:Linux中“创建进程”的本质,是内核为新进程生成唯一PID、创建独立PCB,并为其分配所需资源的过程。

二、fork()系统调用的核心本质:并非全量复制

2.1 一个经典误区:fork()复制了整个进程的所有资源

很多初学者认为,fork()会把父进程的代码、数据、堆栈、文件描述符等所有资源完整复制一份给子进程,这是完全错误的。

如果fork()做全量资源复制,会带来两个致命问题:

  1. 性能极低
    :大型进程的内存空间可能达GB级,全量复制会消耗大量CPU和内存带宽,进程创建耗时极长;
  2. 资源浪费
    :子进程创建后,往往会通过exec()系列函数加载新的程序镜像(如lspython等命令),此时父进程复制的大部分资源会被直接丢弃,完全没有意义。

2.2 fork()的真实执行逻辑:最小化复制+资源共享

fork()的核心设计思想是**“最小化复制,最大化共享”**,其底层执行流程可概括为5步,仅第1步是“创建新资源”,其余均为“共享+轻量初始化”

  1. 内核为子进程分配唯一的PID,并创建一个全新的PCB(task_struct),这是子进程与父进程的核心区别;
  2. 子进程的PCB会复制父进程的核心属性(文件描述符表、信号处理方式、当前工作目录、用户/组权限等),保证子进程继承父进程的运行环境;
  3. 内核让子进程共享父进程的虚拟地址空间(包括代码段、数据段、堆栈段、内存映射等),而非复制——父子进程的页表指向同一块物理内存
  4. 内核修改页表属性内核资源引用计数:将共享物理内存的页表项标记为**“写保护(Read-Only)”**,同时将文件描述符、内存页等可共享资源的引用计数+1;
  5. 内核将子进程加入调度队列,使其具备被CPU调度的资格,最终fork()会分别向父进程和子进程返回不同值:
    • 父进程返回子进程的PID(大于0的整数),方便父进程通过PID管理子进程;
    • 子进程返回0,子进程可通过getpid()获取自身PID,通过getppid()获取父进程PID。

核心结论fork()的核心工作是创建新PID和PCB,而非复制内存资源;父子进程默认共享所有内存和打开的文件,仅通过写保护和引用计数实现“隔离”。

三、写时复制(Copy-On-Write,COW)原理精讲

写时复制是Linux内核为优化fork()性能设计的惰性复制机制,也是fork()能高效创建进程的核心原因。其核心思想可概括为:当多个进程共享同一块资源时,仅在某个进程尝试修改该资源时,才为其复制一份独立的资源副本,未修改时始终共享

3.1 COW的核心实现机制(基于内存页)

Linux内存管理以页(Page) 为基本单位(默认4KB),COW的实现完全基于内存页的属性控制,核心步骤如下:

  1. fork()阶段
    :父子进程的页表指向同一块物理内存页,内核将该物理页标记为**“COW页”,并将父子进程页表中对应项的权限设置为只读(Read-Only)**;
  2. 只读访问阶段
    :当父子进程仅对该内存页进行读操作时(如读取变量值、访问代码段),内核不做任何额外处理,直接共享物理页,无性能开销;
  3. 写操作触发复制阶段
    :当任意一个进程(父或子)尝试写操作该内存页时(如修改变量值),CPU会检测到**“写保护异常(Page Fault)”**,并将异常交给内核处理;
  4. 内核处理异常
    :内核接收到写保护异常后,会检查该物理页是否为COW页:
    • 若是:内核会分配一块新的物理内存页,将原COW页的内容复制到新页中,然后修改发起写操作的进程的页表,使其指向新的物理页,并将新页的权限恢复为可读写(Read-Write)
    • 若不是:按普通页错误处理(如缺页加载);
  5. 完成写操作
    :页表修改完成后,进程的写操作会重新执行,此时操作的是自己的独立物理页,不会影响其他进程的内存数据。

3.2 COW的关键特性与适用场景

  1. 惰性复制
    :仅在“写操作”发生时才复制资源,避免了fork()时的全量复制开销,进程创建耗时从毫秒级降至微秒级;
  2. 资源高效利用
    :对于创建后立即执行exec()的子进程(如Shell执行命令),几乎不会触发COW复制(因为exec()会直接替换整个虚拟地址空间),实现了“零复制”的极致性能;
  3. 粒度精细
    :按内存页粒度复制,而非整个地址空间——只有被修改的页会被复制,未修改的页始终共享,进一步减少内存消耗;
  4. 透明性
    :COW对用户进程完全透明,开发者无需编写任何代码,内核会自动完成所有页表修改和复制操作,进程感知不到底层的共享和复制过程。

3.3 COW的核心优势

  • 极致的fork()性能
    :解决了全量复制的性能问题,让进程创建成为轻量级操作;
  • 内存高效利用
    :避免了不必要的资源复制,大幅减少内存占用(尤其是多进程共享大量只读数据时);
  • 兼容原有逻辑
    :对用户层完全透明,无需修改应用程序代码,即可享受性能优化。

四、C语言实操:fork()与COW的直观验证

C语言作为贴近系统底层的语言,能直接调用fork()系统调用,是验证fork()特性和COW原理的最佳选择。下面通过3个递进案例,直观展示fork()的返回值特性、COW的共享机制和写时复制触发过程。

案例1:fork()的基本使用——父子进程的PID与返回值

功能:验证fork()的返回值规则(父返子PID,子返0),以及父子进程的PID/PPID关系。代码实现

#include<stdio.h>#include<unistd.h>#include<sys/types.h>intmain() {// 定义变量存储fork()返回值pid_t pid = fork();// 错误处理:fork()失败返回-1if (pid == -1) {        perror("fork failed");return1;    }// 子进程:fork()返回0if (pid == 0) {printf("【子进程】PID: %d,父进程PPID: %d\n", getpid(), getppid());    } // 父进程:fork()返回子进程PID>0else {printf("【父进程】PID: %d,创建的子进程PID: %d\n", getpid(), pid);// 睡眠1秒,避免父进程先退出,子进程成为孤儿进程        sleep(1);    }return0;}

编译运行

编译:gcc fork_basic.c -o fork_basic运行:./fork_basic【父进程】PID: 12345,创建的子进程PID: 12346【子进程】PID: 12346,父进程PPID: 12345

核心结论

  • fork()
    调用一次,返回两次——内核在fork()执行过程中完成了进程分裂,父子进程会从fork()的下一行代码开始并行执行;
  • 父子进程有独立的PID,子进程可通过getppid()获取父进程PID。

案例2:COW只读共享——父子进程共享未修改的内存

功能:验证父子进程在未修改内存数据时,共享同一块物理内存(COW只读阶段)。代码实现

#include<stdio.h>#include<unistd.h>#include<sys/types.h>// 全局变量:存储在数据段,会被父子进程共享int global_var = 100;intmain() {// 局部变量:存储在栈段,同样会被父子进程共享int local_var = 200;pid_t pid = fork();if (pid == -1) {        perror("fork failed");return1;    }if (pid == 0) {// 子进程:仅读取变量,不修改printf("【子进程】只读访问 - global_var: %d, local_var: %d\n", global_var, local_var);// 打印变量地址(虚拟地址),验证父子进程虚拟地址相同printf("【子进程】变量地址 - &global_var: %p, &local_var: %p\n", &global_var, &local_var);    } else {// 父进程:仅读取变量,不修改printf("【父进程】只读访问 - global_var: %d, local_var: %d\n", global_var, local_var);printf("【父进程】变量地址 - &global_var: %p, &local_var: %p\n", &global_var, &local_var);        sleep(1);    }return0;}

编译运行

gcc fork_cow_read.c -o fork_cow_read && ./fork_cow_read【父进程】只读访问 - global_var: 100, local_var: 200【父进程】变量地址 - &global_var: 0x55f8d7a72010, &local_var: 0x7ffd8b6a9abc【子进程】只读访问 - global_var: 100, local_var: 200【子进程】变量地址 - &global_var: 0x55f8d7a72010, &local_var: 0x7ffd8b6a9abc

核心结论

  1. 父子进程的虚拟地址完全相同——Linux中每个进程都有独立的虚拟地址空间,相同的虚拟地址在不同进程中可映射到不同的物理地址(COW写后)或相同的物理地址(COW写前);
  2. 未修改时,父子进程共享物理内存——变量值完全一致,且无任何复制开销,验证了COW的只读共享特性。

案例3:COW写时复制——修改触发物理内存复制

功能:验证当任意进程修改内存数据时,内核会触发COW,为其分配独立物理页,修改后父子进程的变量值相互隔离。代码实现

#include<stdio.h>#include<unistd.h>#include<sys/types.h>int global_var = 100// 全局变量intmain() {int local_var = 200// 局部变量pid_t pid = fork();if (pid == -1) {        perror("fork failed");return1;    }if (pid == 0) {// 子进程:修改变量(触发COW        global_var = 300;        local_var = 400;printf("【子进程】修改后 - global_var: %d, local_var: %d\n", global_var, local_var);    } else {// 父进程:先睡眠,确保子进程完成修改        sleep(1);// 父进程:读取原变量(未被修改)printf("【父进程】未修改 - global_var: %d, local_var: %d\n", global_var, local_var);    }return0;}

编译运行

gcc fork_cow_write.c -o fork_cow_write && ./fork_cow_write【子进程】修改后 - global_var: 300, local_var: 400【父进程】未修改 - global_var: 100, local_var: 200

核心结论

  • 子进程修改变量后,其值发生变化,而父进程的变量值保持不变——证明COW触发了物理内存复制,父子进程的内存数据实现了完全隔离;
  • 修操作对内核是“透明触发”的,开发者无需任何额外操作,内核自动完成页分配、复制和页表修改。

五、Python实操:进程创建与COW的间接体现

Python作为高级解释型语言,没有直接提供fork()系统调用的接口,但Python的multiprocessing模块(跨平台进程管理)在Linux/macOS系统中,底层正是通过调用fork()实现进程创建的(Windows系统无fork(),采用spawn方式)。

因此,我们可以通过multiprocessing模块间接验证Linux下fork()的特性和COW原理,同时要注意:Python的全局解释器锁(GIL) 仅作用于线程,不影响进程,每个Python进程有独立的GIL和解释器实例。

案例1:multiprocessing基础——基于fork()的进程创建

功能:验证Python多进程在Linux下基于fork()创建,子进程继承父进程的资源。代码实现

# -*- coding: utf-8 -*-from multiprocessing import Processimport osimport time全局变量:会被fork()的子进程继承(共享)global_var = 100defchild_task():"""子进程执行的任务"""print(f"【子进程】PID: {os.getpid()},父进程PPID: {os.getppid()}")print(f"【子进程】继承的global_var: {global_var}")if __name__ == "__main__":主进程(父进程)print(f"【主进程】PID: {os.getpid()}")创建子进程:Linux下底层调用fork()    p = Process(target=child_task)启动子进程    p.start()等待子进程执行完成    p.join()print("【主进程】子进程执行完成")

运行结果(Linux)

python3 mp_fork_basic.py【主进程】PID: 12378【子进程】PID: 12379,父进程PPID: 12378【子进程】继承的global_var: 100【主进程】子进程执行完成

核心结论

  • Python的Process创建的子进程,能获取到父进程的PID(PPID),且继承了父进程的全局变量——证明底层是fork()实现,符合fork()的资源继承特性;
  • 必须将进程创建代码放在if __name__ == "__main__":中,避免Python解释器递归创建进程(fork()的特性导致)。

案例2:Python中的COW验证——只读共享,修改隔离

功能:间接验证Linux下Python多进程的COW机制——子进程只读时共享父进程内存,修改时触发COW复制,实现数据隔离。代码实现

# -*- coding: utf-8 -*-from multiprocessing import Processimport osimport time全局变量:COW共享的核心验证对象global_list = [12345]  可变对象global_num = 100不可变对象defchild_modify():"""子进程:修改全局变量,触发COW"""global global_list, global_num修改可变对象(原地修改,触发COW    global_list.append(6)修改变不可变对象(重新赋值,触发COW    global_num = 200print(f"【子进程】修改后 - global_list: {global_list}, global_num: {global_num}")print(f"【子进程】PID: {os.getpid()}")if __name__ == "__main__":print(f"【主进程】修改前 - global_list: {global_list}, global_num: {global_num}")print(f"【主进程】PID: {os.getpid()}")创建子进程(Linuxfork()    p = Process(target=child_modify)    p.start()等待子进程完成修改    time.sleep(1)    p.join()主进程:验证自身变量是否被修改print(f"【主进程】修改后 - global_list: {global_list}, global_num: {global_num}")

运行结果(Linux)

python3 mp_cow_verify.py【主进程】修改前 - global_list: [1, 2, 3, 4, 5], global_num: 100【主进程】PID: 12389【子进程】修改后 - global_list: [1, 2, 3, 4, 5, 6], global_num: 200【子进程】PID: 12390【主进程】修改后 - global_list: [1, 2, 3, 4, 5], global_num: 100

核心结论

  1. COW只读共享
    :子进程启动时能获取到父进程的全局变量初始值,证明底层fork()实现了内存资源共享;
  2. COW写时复制
    :子进程修改变量后,主进程的变量值完全不变,证明修改操作触发了COW,内核为子进程分配了独立的物理内存,父子进程数据隔离;
  3. 跨平台注意
    :该案例仅在Linux/macOS下有效(底层fork()),Windows系统下multiprocessing采用spawn方式,会重新启动Python解释器,子进程不会继承父进程的全局变量(需通过Queue/Pipe传递数据)。

案例3:Python COW的性能优势——大对象的高效共享

功能:验证COW对大内存对象的优化效果——子进程只读大对象时,不占用额外内存,实现高效共享。代码实现

# -*- coding: utf-8 -*-from multiprocessing import Processimport osimport psutilimport time创建大对象(100MB的字节数组,模拟大内存数据)big_data = b'x' * 1024 * 1024 * 100# 100MBdefchild_read():"""子进程:仅读取大对象,不修改(不触发COW"""    process = psutil.Process(os.getpid())获取子进程的内存占用(RSS:实际物理内存使用)    mem_rss = process.memory_info().rss / 1024 / 1024转换为MBprint(f"【子进程】仅读取大对象 - 物理内存占用{mem_rss:.2f} MB")保持运行,方便观察    time.sleep(5)if __name__ == "__main__":    main_process = psutil.Process(os.getpid())主进程的内存占用(包含100MB大对象)    main_mem = main_process.memory_info().rss / 1024 / 1024print(f"【主进程】创建大对象后 - 物理内存占用{main_mem:.2f} MB")创建子进程    p = Process(target=child_read)    p.start()主进程保持运行    time.sleep(6)    p.join()

运行结果(Linux)

python3 mp_cow_bigdata.py【主进程】创建大对象后 - 物理内存占用: 120.50 MB  包含100MB大对象+解释器本身【子进程】仅读取大对象 - 物理内存占用: 25.30 MB   仅占用解释器内存,未复制100MB大对象

核心结论

  • 子进程仅读取大对象时,物理内存占用远小于主进程,未包含100MB大对象的内存开销——证明COW实现了大对象的零复制共享,大幅节省了内存;
  • 若子进程修改big_data,则会触发COW,子进程的物理内存占用会立即增加约100MB(复制大对象),这是COW惰性复制的直观体现。

通过本文的底层原理拆解和跨语言实操,相信你已彻底掌握Linux进程创建的核心逻辑和写时复制的实现细节。fork()与COW的设计思想,是Linux内核“高效、简洁、惰性”设计哲学的经典体现,理解其原理对深入掌握Linux系统编程和多进程开发至关重要。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-07 18:45:22 HTTP/2.0 GET : https://f.mffb.com.cn/a/470819.html
  2. 运行时间 : 0.184086s [ 吞吐率:5.43req/s ] 内存消耗:4,467.11kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=bd8c82d253dd8eef0e9fe82ea69bd465
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000581s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000713s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.002910s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.003180s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000504s ]
  6. SELECT * FROM `set` [ RunTime:0.001843s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000683s ]
  8. SELECT * FROM `article` WHERE `id` = 470819 LIMIT 1 [ RunTime:0.024023s ]
  9. UPDATE `article` SET `lasttime` = 1770461123 WHERE `id` = 470819 [ RunTime:0.002598s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000607s ]
  11. SELECT * FROM `article` WHERE `id` < 470819 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.003182s ]
  12. SELECT * FROM `article` WHERE `id` > 470819 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000760s ]
  13. SELECT * FROM `article` WHERE `id` < 470819 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000671s ]
  14. SELECT * FROM `article` WHERE `id` < 470819 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.018559s ]
  15. SELECT * FROM `article` WHERE `id` < 470819 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.031323s ]
0.186875s