当前位置:首页>Linux>Linux进程间通信

Linux进程间通信

  • 2026-08-18 23:11:41
Linux进程间通信

嵌入式Linux系统通常运行多个进程协同工作,这些进程之间需要交换数据、同步动作,选错IPC机制轻则效率低下,重则数据丢失、死锁。

IPC机制全景

Linux提供了多种IPC机制,各自有不同的设计目标和适用场景。没有"最好的"IPC,只有"最合适的"。

少量, 状态/命令

大量, 流式

IPC需求
数据量?
需要异步通知?
信号
有亲缘关系?
匿名管道
FIFO/消息队列
需要双向通信?
Unix Socket
需要零拷贝?
共享内存+信号量

管道

管道是最古老的IPC机制,分匿名管道和命名管道(FIFO)两种。

匿名管道

匿名管道只能用于有亲缘关系的进程间(通常是父子进程),半双工通信。

#include<unistd.h>#include<stdio.h>#include<string.h>// 父子进程通过管道通信intmain(void){int pipefd[2];pid_t pid;char buf[128];if (pipe(pipefd) < 0) {        perror("pipe");return-1;    }    pid = fork();if (pid < 0) {        perror("fork");return-1;    }if (pid == 0) {// 子进程:关闭写端,只读        close(pipefd[1]);        read(pipefd[0], buf, sizeof(buf));printf("child recv: %s\n", buf);        close(pipefd[0]);    } else {// 父进程:关闭读端,只写        close(pipefd[0]);        write(pipefd[1], "hello from parent"18);        close(pipefd[1]);        wait(NULL);    }return0;}

管道的读写行为有几个特点值得注意。写端全部关闭后,读端read()返回0(EOF),而不是阻塞。读端全部关闭后,写端write()触发SIGPIPE信号,默认终止进程。管道容量有限(Linux默认64KB),写满后write()阻塞直到读端消费数据。

命名管道(FIFO)

FIFO在文件系统中存在路径名,任何有权限的进程都能打开它。

#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>// 进程A:创建FIFO并写入voidprocess_a(void){    mkfifo("/tmp/myfifo"0666);int fd = open("/tmp/myfifo", O_WRONLY);    write(fd, "sensor_data:25.6"16);    close(fd);}// 进程B:读取FIFOvoidprocess_b(void){int fd = open("/tmp/myfifo", O_RDONLY);char buf[128];    read(fd, buf, sizeof(buf));    close(fd);}

FIFO的open()默认阻塞,直到另一端也打开。这个特性在做进程同步时有用,但在不需要同步的场景下会导致进程卡住——用O_NONBLOCK标志打开可以避免阻塞。

管道适合简单的数据流场景:一端生产、一端消费,数据有先后顺序。不适合需要双向通信、多进程同时读写、或需要随机访问数据的场景。

共享内存

共享内存是最快的IPC机制。多个进程把同一块物理内存映射到各自的虚拟地址空间,读写操作不需要内核中转,没有数据拷贝开销。代价是需要手动同步。

#include<sys/shm.h>#include<sys/ipc.h>#include<string.h>#include<stdio.h>// 共享内存结构定义typedefstruct {int write_idx;    // 写位置int read_idx;     // 读位置int data[256];    // 环形缓冲区shm_ring_t;// 进程A:创建共享内存并写入intmain(void){key_t key = ftok("/tmp/shmfile"1);int shmid = shmget(key, sizeof(shm_ring_t), IPC_CREAT | 0666);if (shmid < 0) {        perror("shmget");return-1;    }shm_ring_t *ring = (shm_ring_t *)shmat(shmid, NULL0);memset(ring, 0sizeof(shm_ring_t));// 写入数据(实际使用需要信号量保护)int val = 100;while (1) {int next = (ring->write_idx + 1) % 256;if (next != ring->read_idx) {            ring->data[ring->write_idx] = val++;            ring->write_idx = next;        }        usleep(10000);    }    shmdt(ring);return0;}

共享内存本身不提供任何同步机制。上面的代码省略了信号量保护,在实际使用中这是必须的,否则两个进程同时读写write_idx会产生数据竞争。

配合信号量同步

#include<sys/sem.h>// 二值信号量操作unionsemun {int val;structsemid_ds *buf;unsignedshort *array;};// P操作(获取)voidsem_lock(int semid){structsembufop = {        .sem_num = 0,        .sem_op = -1,      // 减1        .sem_flg = SEM_UNDO    };    semop(semid, &op, 1);}// V操作(释放)voidsem_unlock(int semid){structsembufop = {        .sem_num = 0,        .sem_op = 1,       // 加1        .sem_flg = SEM_UNDO    };    semop(semid, &op, 1);}// 创建信号量并初始化为1intcreate_semaphore(key_t key){int semid = semget(key, 1, IPC_CREAT | 0666);unionsemunarg;    arg.val = 1;    semctl(semid, 0, SETVAL, arg);return semid;}

SEM_UNDO标志保证进程异常退出时自动释放信号量,避免死锁。如果进程在持有信号量时崩溃,内核会回滚信号量值。不加这个标志的话,一个进程崩溃后其他等待该信号量的进程将永久阻塞。

共享内存适合大数据量、高频率的场景:视频帧传输、传感器数据流、进程间共享配置。不适合小数据量偶尔通信的场景——映射开销和同步复杂度不划算。

mmap共享内存

System V共享内存(shmget/shmat)是老接口。更现代的做法是用mmap配合shm_open

#include<sys/mman.h>#include<fcntl.h>#include<unistd.h>// 进程A:创建共享内存对象int fd = shm_open("/my_shm", O_CREAT | O_RDWR, 0666);ftruncate(fd, sizeof(shm_ring_t));shm_ring_t *ring = mmap(NULLsizeof(shm_ring_t),                         PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);close(fd);  // 映射后可以关闭fd// 进程B:打开已有的共享内存对象int fd = shm_open("/my_shm", O_RDWR, 0666);shm_ring_t *ring = mmap(NULLsizeof(shm_ring_t),                         PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);close(fd);// 使用完毕后解除映射munmap(ring, sizeof(shm_ring_t));// 删除共享内存对象shm_unlink("/my_shm");

shm_open创建的共享内存对象在/dev/shm/下,受tmpfs大小限制。这种方式比System V接口更简洁,也更容易管理——用ls /dev/shm/就能看到所有共享内存对象。

消息队列

消息队列提供了带类型的消息传递。每条消息有优先级,接收端可以按优先级选择性接收。

#include<sys/msg.h>#include<string.h>// 消息结构typedefstruct {long mtype;          // 消息类型(必须 > 0)char mtext[256];     // 消息内容msg_t;// 发送进程voidsender(void){key_t key = ftok("/tmp/msgfile"1);int msqid = msgget(key, IPC_CREAT | 0666);msg_t msg;    msg.mtype = 1;  // 类型1:普通数据strcpy(msg.mtext, "temperature:25.6");    msgsnd(msqid, &msg, strlen(msg.mtext), 0);    msg.mtype = 2;  // 类型2:告警数据strcpy(msg.mtext, "OVERTEMP_ALARM");    msgsnd(msqid, &msg, strlen(msg.mtext), 0);}// 接收进程:优先接收告警消息voidreceiver(void){key_t key = ftok("/tmp/msgfile"1);int msqid = msgget(key, IPC_CREAT | 0666);msg_t msg;// mtype = -2 表示接收类型 <= 2 的消息中优先级最高的// 即先收类型2,再收类型1    msgrcv(msqid, &msg, sizeof(msg.mtext), -20);printf("type=%ld, text=%s\n", msg.mtype, msg.mtext);}

msgrcvmtype参数决定了接收行为:

  • • mtype > 0:只接收指定类型的消息
  • • mtype = 0:接收队列中的第一条消息(忽略类型)
  • • mtype < 0:接收类型值 <= |mtype| 的消息中类型值最大的

消息队列的一个问题是每个消息有大小上限(默认8KB),且系统范围内消息队列的总数和总大小都有上限。传大数据时不适合用消息队列。

POSIX消息队列(mq_open/mq_send/mq_receive)是替代方案,接口更清晰,支持通知机制:

#include<mqueue.h>// 创建POSIX消息队列mqd_t mqd = mq_open("/alert_queue", O_CREAT | O_RDWR, 0666NULL);// 设置通知:当队列从空变为非空时发信号structsigeventsev;sev.sigev_notify = SIGEV_SIGNAL;sev.sigev_signo = SIGUSR1;mq_notify(mqd, &sev);// 信号处理函数中接收消息voidhandler(int sig){char buf[256];unsigned prio;ssize_t n = mq_receive(mqd, buf, sizeof(buf), &prio);// 处理消息...}

mq_notify让接收端不必轮询——队列空变非空时内核主动通知。但通知是一次性的,每次通知后需要重新注册。

信号

信号是异步通知机制,适合传递简单的事件信号,不适合传数据。

#include<signal.h>#include<stdio.h>volatilesig_atomic_t alarm_flag = 0;voidalarm_handler(int sig){    alarm_flag = 1;}intmain(void){structsigactionsa;    sa.sa_handler = alarm_handler;    sigemptyset(&sa.sa_mask);    sa.sa_flags = 0;    sigaction(SIGALRM, &sa, NULL);// 设置5秒定时器    alarm(5);while (!alarm_flag) {// 主循环做其他工作        pause();    }printf("alarm triggered\n");return0;}

信号处理有几个陷阱。信号可能在任意时刻打断主程序执行,处理函数中不能调用非异步信号安全(async-signal-safe)的函数。printfmalloc都不是信号安全的——在处理函数中只能设置标志位,在主循环中检查标志位再执行实际逻辑。

sig_atomic_t保证读写操作的原子性,用于信号处理函数和主程序之间的标志位通信。用普通int在理论上可能在某些架构上出问题,虽然x86/ARM上32位对齐读写本身是原子的,但用sig_atomic_t是正确的编程习惯。

如果需要传递少量数据,可以使用sigqueueSA_SIGINFO

voidinfo_handler(int sig, siginfo_t *info, void *ctx){// info->si_value.sival_int 携带了一个整数值printf("received signal with data: %d\n", info->si_value.sival_int);}// 注册带数据的信号处理structsigactionsa;sa.sa_sigaction = info_handler;sigemptyset(&sa.sa_mask);sa.sa_flags = SA_SIGINFO;sigaction(SIGUSR1, &sa, NULL);// 发送带数据的信号unionsigvalval;val.sival_int = 42;sigqueue(target_pid, SIGUSR1, val);

Unix域套接字

Unix域套接字提供了全双工、面向流或数据报的通信方式。它在本地进程间通信的效率远高于网络套接字,因为没有协议栈开销。

#include<sys/socket.h>#include<sys/un.h>#include<string.h>#include<stdio.h>#include<unistd.h>// 服务端intserver_main(void){int sock = socket(AF_UNIX, SOCK_STREAM, 0);structsockaddr_unaddr;memset(&addr, 0sizeof(addr));    addr.sun_family = AF_UNIX;strncpy(addr.sun_path, "/tmp/daemon.sock"sizeof(addr.sun_path) - 1);    unlink("/tmp/daemon.sock");  // 清理残留    bind(sock, (struct sockaddr *)&addr, sizeof(addr));    listen(sock, 5);while (1) {int client = accept(sock, NULLNULL);char buf[256];int n = read(client, buf, sizeof(buf));        buf[n] = '\0';printf("request: %s\n", buf);        write(client, "OK"2);        close(client);    }}// 客户端intclient_main(void){int sock = socket(AF_UNIX, SOCK_STREAM, 0);structsockaddr_unaddr;memset(&addr, 0sizeof(addr));    addr.sun_family = AF_UNIX;strncpy(addr.sun_path, "/tmp/daemon.sock"sizeof(addr.sun_path) - 1);    connect(sock, (struct sockaddr *)&addr, sizeof(addr));    write(sock, "get_status"10);char buf[256];int n = read(sock, buf, sizeof(buf));    buf[n] = '\0';printf("response: %s\n", buf);    close(sock);}

Unix域套接字支持传递文件描述符(SCM_RIGHTS),这是它独有的能力。一个进程可以打开文件或设备,把文件描述符通过Unix域套接字传给另一个进程,后者直接操作同一个文件描述符——不需要知道文件路径,也不需要文件权限。

#include<sys/uio.h>// 发送文件描述符voidsend_fd(int sock, int fd){structmsghdrmsg;structioveciov;char buf[1] = {0};    iov.iov_base = buf;    iov.iov_len = 1;    msg.msg_iov = &iov;    msg.msg_iovlen = 1;    msg.msg_name = NULL;    msg.msg_namelen = 0;char cmsgbuf[CMSG_SPACE(sizeof(int))];    msg.msg_control = cmsgbuf;    msg.msg_controllen = sizeof(cmsgbuf);structcmsghdr *cmsg = CMSG_FIRSTHDR(&msg);    cmsg->cmsg_level = SOL_SOCKET;    cmsg->cmsg_type = SCM_RIGHTS;    cmsg->cmsg_len = CMSG_LEN(sizeof(int));    *(int *)CMSG_DATA(cmsg) = fd;    sendmsg(sock, &msg, 0);}// 接收文件描述符intrecv_fd(int sock){structmsghdrmsg;structioveciov;char buf[1];    iov.iov_base = buf;    iov.iov_len = 1;    msg.msg_iov = &iov;    msg.msg_iovlen = 1;    msg.msg_name = NULL;    msg.msg_namelen = 0;char cmsgbuf[CMSG_SPACE(sizeof(int))];    msg.msg_control = cmsgbuf;    msg.msg_controllen = sizeof(cmsgbuf);    recvmsg(sock, &msg, 0);structcmsghdr *cmsg = CMSG_FIRSTHDR(&msg);if (cmsg && cmsg->cmsg_type == SCM_RIGHTS) {return *(int *)CMSG_DATA(cmsg);    }return-1;}

这个能力在特权分离设计中很有用。一个root权限的服务进程打开/dev/mem或GPIO设备,把文件描述符传给非特权工作进程,后者就能操作硬件而不需要root权限。

各机制对比

特性
管道
共享内存
消息队列
信号
Unix Socket
数据拷贝
1次
0次
1次
1次
方向
单向
双向
单向
单向
双向
同步
自带
需手动
自带
自带
自带
数据量
中(64KB)
大(物理内存)
小(8KB/条)
极小(1int)
持久性
进程生命周期
需手动删除
需手动删除
即时
进程生命周期
复杂度

选择IPC机制的核心依据是通信模式。如果是一对一的数据流,管道或FIFO足够。如果是大量数据高频交换,共享内存配合信号量。如果是多生产者多消费者的命令/事件分发,消息队列。如果只是偶尔的通知,信号。如果需要双向通信、灵活的协议、或者传递文件描述符,Unix域套接字。

场景分析
数据量小, 简单通知
数据流, 一进一出
大数据量, 高频率
多对多, 带优先级
需要双向 + 协议
信号
管道/FIFO
共享内存+信号量
消息队列
Unix Socket

实际项目中经常组合使用多种IPC。采集进程通过共享内存把传感器数据写给处理进程,处理进程通过消息队列把控制命令发给执行进程,监控进程通过信号通知各进程优雅退出。理解每种机制的边界,才能做出合理选择。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 18:55:58 HTTP/2.0 GET : https://f.mffb.com.cn/a/508710.html
  2. 运行时间 : 0.209400s [ 吞吐率:4.78req/s ] 内存消耗:4,569.89kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=fa07f0cc809e89840c73c29aab3ac16a
  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.001017s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001509s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000694s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000683s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001373s ]
  6. SELECT * FROM `set` [ RunTime:0.000594s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001654s ]
  8. SELECT * FROM `article` WHERE `id` = 508710 LIMIT 1 [ RunTime:0.004146s ]
  9. UPDATE `article` SET `lasttime` = 1787309758 WHERE `id` = 508710 [ RunTime:0.020841s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000769s ]
  11. SELECT * FROM `article` WHERE `id` < 508710 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001279s ]
  12. SELECT * FROM `article` WHERE `id` > 508710 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.003739s ]
  13. SELECT * FROM `article` WHERE `id` < 508710 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.002344s ]
  14. SELECT * FROM `article` WHERE `id` < 508710 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.004243s ]
  15. SELECT * FROM `article` WHERE `id` < 508710 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.006447s ]
0.212986s