当前位置:首页>Linux>救命!Linux进程间通信,竟是“打工人隔空聊天”秘籍

救命!Linux进程间通信,竟是“打工人隔空聊天”秘籍

  • 2026-04-19 07:23:43
救命!Linux进程间通信,竟是“打工人隔空聊天”秘籍

点击蓝字

关注我们

救命!Linux进程间通信,竟是“打工人隔空聊天”秘籍

新手必看|告别进程“孤立干活”,通俗讲透5种通信方式+实操,马年玩转进程协作✅

一、前言:谁懂啊!Linux进程,竟是“社恐打工人”

刚吃透线程同步与互斥的宝子们,又被“进程间通信”搞破防了:好不容易学会创建进程、操控线程,却发现一个致命问题——各个进程就像一群社恐打工人,各自守着自己的工位(独立资源),互不说话、互不配合,你干你的、我干我的,哪怕遇到需要协作的活,也只能各自摸索,效率低到离谱;刷教程看到“管道”“消息队列”“共享内存”,一堆陌生名词看得头晕,总觉得“进程间通信太高深,新手学不会”。

就像公司里,销售部(进程A)拿到客户订单,需要把订单信息传给财务部(进程B)对账,再传给仓储部(进程C)发货,结果三个部门互不沟通,销售部把订单藏在自己工位,财务部不知道有订单要对账,仓储部不知道要发货,最后订单超时、客户投诉,反而越干越乱;Linux进程也是如此,每个进程都有自己独立的内存空间,就像社恐打工人的独立工位,不主动“说话”,就没法协作,而进程间通信,就是给这些“社恐打工人”搭建沟通桥梁,让它们能隔空传递信息、协同干活。

今天就用最接地气、最风趣的话,把Linux进程间通信讲透,不搞复杂底层原理,不堆晦涩术语,只讲“进程间通信是什么、为什么需要、有哪些方式”,搭配生活化类比和简单实操,全程无多余内容,新手跟着学,马年轻松拿捏进程间通信,再也不怕进程“孤立干活”!

二、先搞懂:进程间通信,就是给“社恐打工人”搭沟通桥

2.1 核心定义:进程间通信(IPC)= 进程版“隔空聊天”

先破除新手恐惧:进程间通信(简称IPC),不是什么高深技术,本质就是让两个或多个进程,能够互相传递信息、协同工作,就像给社恐打工人搭一座沟通桥,让它们不用面对面,也能传递文件、共享数据、同步任务,不用再各自孤立干活。

还是用“公司部门”的类比,新手不用死记硬背,一眼就能懂:

1.  进程:就像公司里的各个部门(销售部、财务部、仓储部),每个部门有自己的独立办公区域(进程独立内存),有自己的工作内容,不沟通就没法协作;

2.  进程间通信:就像公司的内部聊天软件、文件传输工具,销售部通过工具把订单传给财务部,财务部传对账结果给仓储部,各个部门通过工具沟通,协同完成整个订单流程——这就是进程间通信的核心作用:打破进程的“孤立壁垒”,实现协同工作。

补充一句:进程和线程不一样,线程是进程的“分身”,共用进程的资源,不用专门沟通就能协作;而进程是“独立的打工人”,有自己的独立资源,必须通过专门的“通信方式”,才能传递信息,这也是为什么我们学完进程、线程,还要学进程间通信的原因——让多个独立进程,能高效协作,发挥更大作用。

2.2 灵魂拷问:为什么一定要搞进程间通信?

新手最头疼的问题:我不搞进程间通信,单个进程照样能跑,为什么非要多此一举?其实不是不能跑,而是遇到“多进程协作”的场景,就会彻底卡壳,就像公司各个部门不沟通,订单没法推进、工作没法落地,程序也是一样的道理:

举个实操场景(新手能懂的简单例子):你写一个下载程序,一个进程负责下载文件(下载进程),一个进程负责显示下载进度(显示进程),如果没有进程间通信,下载进程不知道自己下载了多少,没法把进度传给显示进程,显示进程就只能一直显示“0%”,用户根本不知道下载进度,体验拉胯;而通过进程间通信,下载进程把实时进度传给显示进程,显示进程实时更新,才能实现一个完整、流畅的下载程序。

核心原因总结(新手记这3点就够):

1.  实现协同工作:多个进程分工明确(比如一个下载、一个显示),通过通信传递信息,才能协同完成复杂任务,单进程根本扛不住;

2.  共享数据资源:多个进程需要共享同一个数据(比如订单信息、下载进度),通过通信实现数据共享,不用重复创建数据,节省资源;

3.  同步任务节奏:多个进程的工作有先后顺序(比如先下载、再显示,先对账、再发货),通过通信同步节奏,避免无序操作导致的程序混乱。

小结:进程间通信,就是进程的“沟通工具”,没有这个工具,多个进程就是“一盘散沙”,各自孤立、无法协作;有了这个工具,多个进程才能分工明确、高效配合,完成单进程做不到的复杂任务。

三、新手必懂:5种进程间通信方式,马年直接抄作业

很多新手觉得“进程间通信很难”,其实一点都不难,Linux进程间通信有多种方式,新手重点掌握5种最常用的,从简单到复杂,用法固定,代码注释拉满,直接复制粘贴练习,不用纠结底层原理,先会用、先避坑,再慢慢进阶理解。

重点说明:我们还是用Linux C语言实现,每一种方式都有通俗解释和实操代码,兼顾简单性和实用性,新手能轻松上手,编译命令会单独标注,避免报错。

3.1 方式1:管道(pipe)—— 最基础,进程版“传纸条”

管道,是最基础、最简单的进程间通信方式,相当于给两个进程之间拉一根“纸条通道”,一个进程往通道里写数据(传纸条),另一个进程从通道里读数据(读纸条),只能单向传递,就像两个人隔着墙,只能通过纸条传递信息,不能双向聊天。

核心逻辑:管道分为“匿名管道”和“命名管道”,新手先掌握匿名管道(最常用),它只能用于“有亲缘关系”的进程(比如父进程和子进程),就像同一个部门的两个打工人,只能互相传纸条,不能传给其他部门。

实操代码示例(注释拉满,新手直接抄):

```Plain Text

#include <stdio.h>

#include <unistd.h>

#include <string.h>

int main() {

   int pipe_fd[2]; // 定义管道,pipe_fd[0]读端,pipe_fd[1]写端

   char buf[1024] = {0};

   // 1. 创建匿名管道(失败返回-1)

   if (pipe(pipe_fd) == -1) {

       printf("管道创建失败,没法传纸条啦~\n");

       return 1;

   }

   // 创建子进程(父子进程有亲缘关系,才能用匿名管道)

   pid_t pid = fork();

   if (pid == -1) {

       printf("子进程创建失败~\n");

       return 1;

   } else if (pid == 0) {

       // 子进程:读数据(读纸条),关闭写端

       close(pipe_fd[1]);

       // 从管道读数据

       read(pipe_fd[0], buf, sizeof(buf));

       printf("子进程(读纸条):收到父进程的消息:%s\n", buf);

       close(pipe_fd[0]);

   } else {

       // 父进程:写数据(传纸条),关闭读端

       close(pipe_fd[0]);

       char msg[] = "嗨,子进程,我是父进程,一起干活呀~";

       // 往管道写数据

       write(pipe_fd[1], msg, strlen(msg));

       printf("父进程(传纸条):已发送消息给子进程\n");

       close(pipe_fd[1]);

       // 等待子进程读完

       wait(NULL);

   }

   return 0;

}

```

编译命令(新手必记):gcc pipe.c -o pipe(匿名管道不用额外加参数,直接编译即可)

记忆技巧:pipe = “管道”,联想成“进程之间传纸条的通道”,新手记住“匿名管道只能用于亲缘进程、单向传递”,先会用父子进程间的管道通信,再进阶学习命名管道。

3.2 方式2:命名管道(FIFO)—— 进阶版“传纸条”,跨进程可用

命名管道,是匿名管道的进阶版,相当于给“纸条通道”起了一个名字,不管两个进程有没有亲缘关系,只要知道这个“名字”,就能通过管道传递信息,就像公司的公共邮箱,不管哪个部门的打工人,只要知道邮箱地址,就能发送文件、传递消息,不限部门。

核心逻辑:命名管道会在文件系统中创建一个“虚拟文件”(不是真实的文件,只是一个标识),两个进程通过这个虚拟文件,实现数据的读写传递,可双向传递,也可跨亲缘关系使用,比匿名管道更灵活。

实操代码示例(分两个文件,新手直接抄,分别编译):

文件1:write_fifo.c(写进程,往命名管道写数据)

```Plain Text

#include <stdio.h>

#include <unistd.h>

#include <string.h>

#include <sys/stat.h>

#include <fcntl.h>

int main() {

   // 1. 创建命名管道(名字叫"my_fifo",失败返回-1)

   if (mkfifo("my_fifo", 0666) == -1) {

       printf("命名管道创建失败~\n");

       return 1;

   }

   // 2. 打开命名管道(写方式)

   int fd = open("my_fifo", O_WRONLY);

   if (fd == -1) {

       printf("打开命名管道失败~\n");

       return 1;

   }

   // 往管道写数据

   char msg[] = "嗨,陌生进程,我是写进程,传递消息啦~";

   write(fd, msg, strlen(msg));

   printf("写进程:已发送消息\n");

   // 关闭管道

   close(fd);

   // 删除命名管道(用完删除,避免占用资源)

   unlink("my_fifo");

   return 0;

}

```

文件2:read_fifo.c(读进程,从命名管道读数据)

```Plain Text

#include <stdio.h>

#include <unistd.h>

#include <string.h>

#include <sys/stat.h>

#include <fcntl.h>

int main() {

   char buf[1024] = {0};

   // 打开命名管道(读方式,必须和写进程的管道名字一致)

   int fd = open("my_fifo", O_RDONLY);

   if (fd == -1) {

       printf("打开命名管道失败~\n");

       return 1;

   }

   // 从管道读数据

   read(fd, buf, sizeof(buf));

   printf("读进程:收到写进程的消息:%s\n", buf);

   // 关闭管道

   close(fd);

   return 0;

}

```

编译命令:gcc write_fifo.c -o write_fifo;gcc read_fifo.c -o read_fifo(分别编译两个文件,先运行写进程,再运行读进程)

记忆技巧:FIFO = “命名管道”,联想成“有名字的管道,跨进程都能用来传消息”,新手记住“先创建、再打开、用完删除”,名字必须一致,不然没法通信。

3.3 方式3:消息队列(msgqueue)—— 进程版“快递柜”

消息队列,相当于给进程之间放了一个“快递柜”,一个进程把数据(消息)打包成“快递”,放到快递柜里,另一个进程从快递柜里取快递、解析数据,可双向传递,还能按“消息类型”分类,就像公司的快递柜,不同部门的快递按类型分类,取件人能快速找到自己的快递。

核心逻辑:消息队列会在系统内核中创建一个“队列”,每个消息都有自己的类型,发送进程按类型发送消息,接收进程按类型接收消息,不用像管道那样“先写后读”,可异步通信,哪怕接收进程没启动,发送进程也能先把消息放到队列里。

实操代码示例(注释拉满,新手直接抄):

```Plain Text

#include <stdio.h>

#include <unistd.h>

#include <string.h>

#include <sys/msg.h>

// 定义消息结构体(必须包含mtype和mtext,mtype是消息类型)

struct msgbuf {

   long mtype; // 消息类型(必须大于0)

   char mtext[1024]; // 消息内容

};

int main() {

   key_t key;

   int msgid;

   struct msgbuf msg;

   // 1. 创建key值(相当于快递柜的编号,发送和接收进程必须一致)

   key = ftok(".", 1);

   if (key == -1) {

       printf("创建key值失败~\n");

       return 1;

   }

   // 2. 创建消息队列(快递柜)

   msgid = msgget(key, IPC_CREAT | 0666);

   if (msgid == -1) {

       printf("创建消息队列失败~\n");

       return 1;

   }

   // 创建子进程,模拟发送和接收消息

   pid_t pid = fork();

   if (pid == -1) {

       printf("子进程创建失败~\n");

       return 1;

   } else if (pid == 0) {

       // 子进程:接收消息(取快递),按类型1接收

       msg.mtype = 1;

       msgrcv(msgid, &msg, sizeof(msg.mtext), 1, 0);

       printf("子进程(取快递):收到消息:%s\n", msg.mtext);

   } else {

       // 父进程:发送消息(放快递),消息类型设为1

       msg.mtype = 1;

       strcpy(msg.mtext, "消息队列真方便,像快递柜一样放消息~");

       msgsnd(msgid, &msg, sizeof(msg.mtext), 0);

       printf("父进程(放快递):已发送消息\n");

       wait(NULL);

       // 销毁消息队列(用完销毁,释放资源)

       msgctl(msgid, IPC_RMID, NULL);

   }

   return 0;

}

```

编译命令:gcc msgqueue.c -o msgqueue(直接编译即可)

记忆技巧:msgqueue = “消息队列”,联想成“进程之间的快递柜,消息按类型存放,按需取用”,新手记住“消息结构体必须有mtype,key值必须一致”,不然没法发送和接收消息。

3.4 方式4:共享内存(shm)—— 最快,进程版“共享办公桌”

共享内存,是所有进程间通信方式中最快的一种,相当于给多个进程之间放了一张“共享办公桌”,多个进程都能直接访问这张桌子上的文件(数据),不用像管道、消息队列那样“传纸条、放快递”,直接读写共享数据,效率极高,就像同一个部门的打工人,共用一张办公桌,文件放在桌上,谁都能直接拿、直接改,不用互相传递。

核心逻辑:共享内存会在系统内核中开辟一块“共享内存区域”,多个进程把这块区域映射到自己的内存空间,就能直接读写这块区域的数据,省去了“数据拷贝”的步骤,所以速度最快,但需要配合互斥锁(之前学的),防止多个进程同时修改数据,导致数据混乱。

实操代码示例(注释拉满,新手直接抄):

```Plain Text

#include <stdio.h>

#include <unistd.h>

#include <string.h>

#include <sys/shm.h>

#include <pthread.h>

int main() {

   key_t key;

   int shmid;

   char *shmaddr;

   // 1. 创建key值(共享内存的编号,多个进程必须一致)

   key = ftok(".", 2);

   if (key == -1) {

       printf("创建key值失败~\n");

       return 1;

   }

   // 2. 创建共享内存(大小1024字节)

   shmid = shmget(key, 1024, IPC_CREAT | 0666);

   if (shmid == -1) {

       printf("创建共享内存失败~\n");

       return 1;

   }

   // 3. 将共享内存映射到当前进程的内存空间

   shmaddr = (char *)shmat(shmid, NULL, 0);

   if (shmaddr == (char *)-1) {

       printf("映射共享内存失败~\n");

       return 1;

   }

   // 创建子进程,模拟共享数据

   pid_t pid = fork();

   if (pid == -1) {

       printf("子进程创建失败~\n");

       return 1;

   } else if (pid == 0) {

       // 子进程:读共享内存的数据

       printf("子进程:读取共享内存数据:%s\n", shmaddr);

       // 往共享内存写数据

       strcpy(shmaddr, "共享内存真快,直接读写太方便啦~");

   } else {

       // 父进程:往共享内存写数据

       strcpy(shmaddr, "父进程写入共享内存的数据~");

       printf("父进程:已写入共享内存数据\n");

       wait(NULL);

       // 读取子进程修改后的数据

       printf("父进程:读取子进程修改后的数据:%s\n", shmaddr);

       // 4. 解除映射

       shmdt(shmaddr);

       // 5. 销毁共享内存

       shmctl(shmid, IPC_RMID, NULL);

   }

   return 0;

}

```

编译命令:gcc shm.c -o shm(直接编译即可)

记忆技巧:shm = “共享内存”,联想成“进程之间的共享办公桌,数据直接放桌上,谁都能访问”,新手记住“先创建、再映射、用完解除映射+销毁”,一定要配合互斥锁,避免数据混乱。

3.5 方式5:信号量(semaphore)—— 共享内存“保安”,防抢资源

信号量,我们之前学线程同步时讲过,在进程间通信中,它的作用是“保护共享资源”,相当于共享内存(共享办公桌)旁边的保安,防止多个进程同时修改共享数据,就像保安看着办公桌,同一时间只允许一个打工人修改桌上的文件,避免混乱——信号量本身不传递数据,只负责“同步互斥”,通常和共享内存配合使用。

核心逻辑:和线程信号量一样,进程间的信号量也是“资源计数器”,初始值设为1(表示同一时间只能有一个进程访问共享资源),进程访问共享内存前,申请信号量(减1),访问完后,释放信号量(加1),如果信号量为0,其他进程只能等待。

实操代码示例(结合共享内存,注释拉满,新手直接抄):

```Plain Text

#include <stdio.h>

#include <unistd.h>

#include <string.h>

#include <sys/shm.h>

#include <semaphore.h>

#include <fcntl.h>

int main() {

   key_t key;

   int shmid;

   char *shmaddr;

   sem_t *sem;

   // 创建key值

   key = ftok(".", 3);

   if (key == -1) {

       printf("创建key值失败~\n");

       return 1;

   }

   // 创建共享内存

   shmid = shmget(key, 1024, IPC_CREAT | 0666);

   if (shmid == -1) {

       printf("创建共享内存失败~\n");

       return 1;

   }

   // 映射共享内存

   shmaddr = (char *)shmat(shmid, NULL, 0);

   if (shmaddr == (char *)-1) {

       printf("映射共享内存失败~\n");

       return 1;

   }

   // 创建信号量(命名信号量,进程间可用)

   sem = sem_open("my_sem", O_CREAT | O_RDWR, 0666, 1);

   if (sem == SEM_FAILED) {

       printf("创建信号量失败~\n");

       return 1;

   }

   pid_t pid = fork();

   if (pid == -1) {

       printf("子进程创建失败~\n");

       return 1;

   } else if (pid == 0) {

       // 子进程:申请信号量,访问共享内存

       sem_wait(sem);

       strcpy(shmaddr, "子进程修改共享内存数据~");

       printf("子进程:修改共享内存完毕\n");

       sem_post(sem); // 释放信号量

   } else {

       // 父进程:申请信号量,访问共享内存

       sem_wait(sem);

       strcpy(shmaddr, "父进程修改共享内存数据~");

       printf("父进程:修改共享内存完毕\n");

       sem_post(sem); // 释放信号量

       wait(NULL);

       // 读取共享内存数据

       printf("最终共享内存数据:%s\n", shmaddr);

       // 清理资源

       shmdt(shmaddr);

       shmctl(shmid, IPC_RMID, NULL);

       sem_close(sem);

       sem_unlink("my_sem");

   }

   return 0;

}

```

编译命令:gcc sem_shm.c -o sem_shm -lpthread(信号量需要加-lpthread参数)

记忆技巧:进程间信号量 = “共享内存的保安”,联想成“保护共享数据不被多个进程同时修改”,新手记住“和共享内存配合使用,申请信号量→访问资源→释放信号量”,避免数据混乱。

小结:5种核心通信方式,从简单到复杂:管道(基础传纸条)→ 命名管道(跨进程传纸条)→ 消息队列(快递柜)→ 共享内存(最快,共享办公桌)→ 信号量(保安,配合共享内存),新手先掌握管道和共享内存,再学其他方式,多敲几遍代码,就能熟练掌握。

四、避坑指南:新手用进程间通信,别再踩这些坑

4.1 陷阱1:匿名管道用于非亲缘进程,导致通信失败

新手最容易犯的错:用匿名管道给两个没有亲缘关系的进程(比如两个独立的程序)通信,结果通信失败,以为自己代码写错了,其实是匿名管道的限制——只能用于父进程、子进程等有亲缘关系的进程。

避坑妙招:非亲缘进程通信,用命名管道、消息队列或共享内存,不要用匿名管道;匿名管道只用于亲缘进程,记住这个限制,就不会踩坑。

4.2 陷阱2:共享内存不配合信号量,导致数据混乱

很多新手用共享内存时,不加信号量,多个进程同时修改共享数据,导致数据越改越乱,就像多个打工人同时抢改办公桌上的文件,越改越乱——共享内存速度快,但没有自带的同步互斥机制。

避坑妙招:用共享内存时,一定要配合信号量或互斥锁,保证同一时间只有一个进程修改共享数据,从根源上避免数据混乱。

4.3 陷阱3:用完不销毁资源,导致系统资源浪费

新手容易忽略的点:创建管道、消息队列、共享内存、信号量后,用完不销毁,导致这些资源一直占用系统内存,时间长了,系统会越来越卡,就像用完快递柜不清理,一直占用柜子,别人没法用。

避坑妙招:记住“用完必清理”——管道关闭读写端,命名管道用完unlink删除,消息队列、共享内存用ctl函数销毁,信号量关闭并unlink删除,一步都不能少。

4.4 陷阱4:key值不一致,导致进程无法通信

新手用消息队列、共享内存时,两个进程的key值设置不一致,导致无法找到同一个消息队列或共享内存,通信失败,就像两个打工人用不同编号的快递柜,找不到对方的快递。

避坑妙招:多个进程通信时,key值必须一致,最好用ftok函数创建key值,保证两个进程的key值相同,避免通信失败。

4.5 陷阱5:混淆管道的读写端,导致读写失败

新手用管道时,容易搞混读端(pipe_fd[0])和写端(pipe_fd[1]),比如用读端写数据、用写端读数据,导致读写失败,就像把纸条塞到了读端,对方根本读不到。

避坑妙招:死记硬背“pipe_fd[0]是读端,pipe_fd[1]是写端”,写进程关闭读端、用写端写数据,读进程关闭写端、用读端读数据,不要搞混。

五、结尾:进程间通信不难学,马年玩转进程协作

看到这里,是不是觉得Linux进程间通信一点都不难?其实它就是给“社恐进程”搭沟通桥,核心就是5种常用方式,用法固定,代码可以直接抄,只要记住每种方式的适用场景,就能轻松避坑,让多个进程高效协作、不再孤立。

新手不用怕,刚开始不用追求掌握所有通信方式,先掌握最基础的管道和最常用的共享内存,能实现简单的进程间通信,再慢慢进阶,学习命名管道、消息队列和信号量的用法,理解它们的区别和适用场景。学会进程间通信,你就能实现多进程协同工作,完成单进程做不到的复杂任务,不管是做项目还是学运维,都能更高效、更省心。

记住,进程间通信是Linux进程编程的核心,也是后续学习高并发、服务器开发的基础,学会它,能让你对Linux进程的理解更上一层楼,离“Linux高手”又近了一步。

2026丙午马年,愿你吃透Linux进程间通信,轻松实现多进程协同干活,不踩坑、不懵圈,编程之路一马当先,早日实现“进程协作自由”!

✨ 关注我,下期解锁进程间通信进阶用法,新手也能轻松拿捏Linux ✨

扫码关注我们

知识奇妙世界

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-04-20 01:36:28 HTTP/2.0 GET : https://f.mffb.com.cn/a/485022.html
  2. 运行时间 : 0.110057s [ 吞吐率:9.09req/s ] 内存消耗:4,632.05kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=b43a3ae47e14abc4b30ae7d820f51eb2
  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.000356s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000540s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000273s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000281s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000480s ]
  6. SELECT * FROM `set` [ RunTime:0.001661s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000666s ]
  8. SELECT * FROM `article` WHERE `id` = 485022 LIMIT 1 [ RunTime:0.003753s ]
  9. UPDATE `article` SET `lasttime` = 1776620188 WHERE `id` = 485022 [ RunTime:0.001943s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000597s ]
  11. SELECT * FROM `article` WHERE `id` < 485022 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.004648s ]
  12. SELECT * FROM `article` WHERE `id` > 485022 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001140s ]
  13. SELECT * FROM `article` WHERE `id` < 485022 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.011271s ]
  14. SELECT * FROM `article` WHERE `id` < 485022 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.002287s ]
  15. SELECT * FROM `article` WHERE `id` < 485022 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.002828s ]
0.113621s