当前位置:首页>Linux>深度解析:从原理到实战,一文吃透 Linux 信号机制

深度解析:从原理到实战,一文吃透 Linux 信号机制

  • 2026-04-16 19:51:08
深度解析:从原理到实战,一文吃透 Linux 信号机制

给 AI 技术人的 5 点启示:理解操作系统底层通信机制,写出更健壮的代码


一、为什么你需要理解信号机制?

作为开发者,你一定遇到过这些场景:

  • 按下 Ctrl+C,程序为什么能优雅退出?
  • kill -9kill -15 到底有什么区别?
  • 为什么有时候程序"卡住"了,怎么都杀不掉?
  • 如何让自己的程序响应自定义事件?
  • 父子进程之间如何通信?

这些问题的答案,都藏在 Linux 信号机制 中。

信号(Signal)是 Linux 进程间通信的最古老方式,也是操作系统与进程对话的语言。理解信号,不仅能帮你解决日常调试问题,更能让你写出更健壮、更专业的代码。

今天,我们就来深度拆解 Linux 信号机制,从原理到实战,让你彻底吃透这个核心概念。


二、信号是什么?

2.1 核心定义

信号 是操作系统发送给进程的异步通知,用于告知进程某个事件已经发生。

类比理解:
- 信号就像手机的"通知推送"
- 进程就像手机 APP
- 操作系统就像推送服务器

当某个事件发生时(如用户按下 Ctrl+C、进程内存访问越界、定时器到期),操作系统会向目标进程发送一个信号,进程可以选择:
- 立即处理(执行信号处理函数)
- 忽略(当作没收到)
- 默认处理(按系统默认行为执行,通常是终止)

2.2 信号的特点

特点 说明
异步性 信号可以在任何时候到达,进程无法预测
简单性 信号只携带信号编号,不携带数据(实时信号除外)
有限性 标准信号只有 1-31 号,实时信号 34-64 号
不可靠性 标准信号可能丢失(同一信号多次发送只记录一次)

三、常见信号详解

3.1 查看所有信号

# 列出所有信号
kill -l

# 输出示例:
#  1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
#  5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
#  9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
# 13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGSTKFLT
# ...

3.2 必须掌握的 10 个核心信号

编号 名称 含义 默认行为 常见用途
1 SIGHUP 挂起 终止 重新加载配置
2 SIGINT 中断 终止 Ctrl+C 触发
3 SIGQUIT 退出 终止 + 核心转储 Ctrl+\ 触发
9 SIGKILL 强制杀死 立即终止 无法捕获,强制结束
15 SIGTERM 终止请求 终止 kill 默认信号,优雅退出
19 SIGSTOP 停止 暂停执行 无法捕获,调试用
18 SIGCONT 继续 继续执行 配合 SIGSTOP 使用
14 SIGALRM 定时器 终止 定时任务、超时处理
13 SIGPIPE 管道破裂 终止 写入关闭的管道
11 SIGSEGV 段错误 终止 + 核心转储 内存访问越界

3.3 SIGKILL vs SIGTERM:关键区别

这是面试高频题,也是实际工作中的重要知识点:

对比项 SIGTERM (15) SIGKILL (9)
可捕获 ✅ 可以 ❌ 不可以
可忽略 ✅ 可以 ❌ 不可以
优雅退出 ✅ 可以清理资源 ❌ 立即终止
使用场景 正常关闭 强制杀死(最后手段)

最佳实践

# 第一步:发送 SIGTERM,给程序优雅退出的机会
kill -15 <pid>
# 或
kill <pid>  # 默认就是 -15

# 等待几秒,检查进程是否退出
ps -p <pid>

# 第二步:如果还没退出,再发送 SIGKILL
kill -9 <pid>

四、信号的发送与接收

4.1 发送信号

# 方式 1:kill 命令(最常用)
kill -信号名 <PID>
kill -SIGTERM 1234
kill -15 1234

# 方式 2:killall(按进程名)
killall -SIGTERM nginx

# 方式 3:pkill(支持正则)
pkill -SIGTERM 'python.*server'

# 方式 4:在代码中发送
kill -SIGUSR1 <pid>  # 自定义信号

4.2 接收信号:Python 示例

import signal
import sys
import time

# 定义信号处理函数
def handle_sigterm(signum, frame):
    print(f"\n收到 SIGTERM 信号 (编号:{signum})")
    print("正在清理资源...")
    # 执行清理操作
    time.sleep(1)
    print("清理完成,退出程序")
    sys.exit(0)

def handle_sigusr1(signum, frame):
    print(f"\n收到 SIGUSR1 信号,执行自定义操作")
    # 自定义逻辑,如重新加载配置
    reload_config()

# 注册信号处理器
signal.signal(signal.SIGTERM, handle_sigterm)
signal.signal(signal.SIGUSR1, handle_sigusr1)

# 主程序
print(f"进程 ID: {os.getpid()}")
print("等待信号... (按 Ctrl+C 发送 SIGINT)")

while True:
    time.sleep(1)
    print(".", end="", flush=True)

4.3 接收信号:Node.js 示例

const fs = require('fs');

// 优雅退出处理
process.on('SIGTERM', () => {
  console.log('\n收到 SIGTERM 信号');
  console.log('正在关闭服务器...');

  server.close(() => {
    console.log('服务器已关闭');
    process.exit(0);
  });

  // 如果 10 秒后还没关闭,强制退出
  setTimeout(() => {
    console.error('未能优雅关闭,强制退出');
    process.exit(1);
  }, 10000);
});

// 自定义信号处理
process.on('SIGUSR1', () => {
  console.log('收到 SIGUSR1,重新加载配置');
  reloadConfig();
});

console.log(`进程 ID: ${process.pid}`);
console.log('服务运行中...');

五、实战场景:信号的实际应用

场景 1:优雅关闭服务器

问题:直接 kill 掉服务器会导致正在处理的请求中断,用户体验差。

解决方案:捕获 SIGTERM,完成当前请求后再退出。

import signal
import sys
import time
from http.server import HTTPServer, SimpleHTTPRequestHandler

class GracefulServer:
    def __init__(self, port=8000):
        self.server = HTTPServer(('', port), SimpleHTTPRequestHandler)
        self.shutdown_requested = False

    def handle_sigterm(self, signum, frame):
        print("\n收到退出信号,等待当前请求完成...")
        self.shutdown_requested = True

    def run(self):
        # 注册信号处理器
        signal.signal(signal.SIGTERM, self.handle_sigterm)
        signal.signal(signal.SIGINT, self.handle_sigterm)

        print(f"服务器启动在端口 8000 (PID: {os.getpid()})")

        while not self.shutdown_requested:
            self.server.handle_request()

        print("正在关闭服务器...")
        self.server.server_close()
        print("服务器已关闭")

if __name__ == '__main__':
    server = GracefulServer()
    server.run()

场景 2:定时任务与超时处理

问题:如何防止某个操作无限期挂起?

解决方案:使用 SIGALRM 设置超时。

import signal

class TimeoutError(Exception):
    pass

def timeout_handler(signum, frame):
    raise TimeoutError("操作超时!")

def execute_with_timeout(func, timeout_seconds=5, *args, **kwargs):
    """带超时保护的函数执行"""

    # 注册信号处理器
    old_handler = signal.signal(signal.SIGALRM, timeout_handler)

    # 设置定时器
    signal.alarm(timeout_seconds)

    try:
        result = func(*args, **kwargs)
        # 取消定时器
        signal.alarm(0)
        return result
    except TimeoutError as e:
        print(f"错误:{e}")
        return None
    finally:
        # 恢复旧的处理器
        signal.signal(signal.SIGALRM, old_handler)

# 使用示例
def slow_operation():
    time.sleep(10)  # 模拟耗时操作
    return "完成"

result = execute_with_timeout(slow_operation, timeout_seconds=5)
# 5 秒后会抛出 TimeoutError

场景 3:热重载配置

问题:修改配置后必须重启服务,导致服务中断。

解决方案:捕获 SIGHUP 信号,动态重载配置。

import signal
import json

class ConfigManager:
    def __init__(self, config_path='config.json'):
        self.config_path = config_path
        self.config = {}
        self.load_config()

        # 注册 SIGHUP 处理器
        signal.signal(signal.SIGHUP, self.reload_config)

    def load_config(self):
        """加载配置文件"""
        with open(self.config_path, 'r') as f:
            self.config = json.load(f)
        print(f"配置已加载:{self.config}")

    def reload_config(self, signum, frame):
        """重载配置(信号处理器)"""
        print("\n收到 SIGHUP 信号,重新加载配置...")
        try:
            self.load_config()
            print("配置重载成功")
        except Exception as e:
            print(f"配置重载失败:{e}")

# 使用方式:
# 1. 启动程序
# 2. 修改 config.json
# 3. 发送信号:kill -HUP <pid>
# 4. 配置自动重载,无需重启

场景 4:父子进程通信

问题:父进程如何知道子进程完成了任务?

解决方案:使用 SIGUSR1/SIGUSR2 自定义信号。

import signal
import os
import time

def handle_sigusr1(signum, frame):
    print(f"[父进程] 收到子进程的 SIGUSR1 信号,任务完成!")

# 父进程
signal.signal(signal.SIGUSR1, handle_sigusr1)

pid = os.fork()

if pid == 0:
    # 子进程
    print(f"[子进程] 开始工作 (PID: {os.getpid()})")
    time.sleep(3)  # 模拟工作
    print("[子进程] 工作完成,发送信号给父进程")

    # 获取父进程 PID 并发送信号
    os.kill(os.getppid(), signal.SIGUSR1)
    os._exit(0)
else:
    # 父进程
    print(f"[父进程] 等待子进程完成 (子进程 PID: {pid})")
    while True:
        time.sleep(1)

六、信号处理的最佳实践

6.1 不要做什么

在信号处理器中执行复杂操作

# 错误示例
def bad_handler(signum, frame):
    db.connect()  # 可能阻塞
    db.query("SELECT ...")  # 可能死锁
    send_email()  # 可能失败

正确做法:设置标志位,在主循环中处理

shutdown_requested = False

def good_handler(signum, frame):
    global shutdown_requested
    shutdown_requested = True  # 只设置标志

while True:
    if shutdown_requested:
        # 在主循环中安全地执行清理
        cleanup()
        break
    do_work()

6.2 一定要做资源清理

def handle_exit(signum, frame):
    print("清理资源...")

    # 关闭数据库连接
    db.close()

    # 关闭网络连接
    socket.close()

    # 删除临时文件
    os.remove('/tmp/temp_file')

    # 释放锁
    lock.release()

    sys.exit(0)

6.3 处理信号掩码

某些系统调用会被信号中断,需要重试:

import errno

def safe_read(fd, size):
    """处理被信号中断的 read 调用"""
    while True:
        try:
            return os.read(fd, size)
        except OSError as e:
            if e.errno == errno.EINTR:
                # 被信号中断,重试
                continue
            raise

七、给 AI 技术人的 5 点启示

启示 1:理解底层,才能写好上层

信号机制是操作系统的基石之一。理解它,能让你:
- 写出更健壮的代码
- 快速定位"莫名其妙"的 bug
- 设计更好的系统架构

启示 2:优雅比强制更重要

SIGTERM vs SIGKILL 的对比告诉我们:
- 给别人(进程)留退路,就是给自己留后路
- 强制手段应该是最后选择,而非首选

启示 3:异步思维是高级技能

信号的异步特性要求我们:
- 时刻准备应对"意外"
- 设计容错机制
- 避免竞态条件

启示 4:简单不等于无用

信号机制看似简单(只有一个编号),却支撑了 Unix 50 年的稳定运行。这启示我们:
- 简单的设计往往最可靠
- 不要过度设计
- 核心机制要精简

启示 5:文档和约定很重要

标准信号(1-31)有明确定义,自定义信号(USR1/USR2)需要约定。这就像:
- API 设计要有文档
- 团队协要有规范
- 代码要有注释


八、总结与行动清单

核心要点回顾

  1. 信号是异步通知:操作系统与进程通信的语言
  2. SIGTERM vs SIGKILL:优雅退出 vs 强制杀死
  3. 信号处理要简洁:设置标志位,主循环处理
  4. 资源清理必须做:避免资源泄漏
  5. 自定义信号很有用:进程间通信的轻量方案

行动清单

# 1. 查看所有信号
kill -l

# 2. 测试信号处理
python3 signal_test.py &
kill -TERM <pid>

# 3. 实践优雅退出
# 在自己的项目中添加 SIGTERM 处理器

# 4. 尝试热重载
# 实现 SIGHUP 配置重载功能

# 5. 深入学习
# 阅读《Unix 环境高级编程》信号章节

延伸阅读

  • 《Unix 环境高级编程》第 10 章:信号
  • Linux 信号机制详解
  • Python signal 模块文档

最后的话

信号机制是 Linux 的"神经系统",理解它,你就理解了操作系统如何与程序对话。

下次当你按下 Ctrl+C,或者执行 kill 命令时,希望你能想起今天的内容——那不仅仅是一个命令,而是一次优雅的通信。


欢迎关注公众号获取更多 AI 实战内容。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-04-17 06:47:53 HTTP/2.0 GET : https://f.mffb.com.cn/a/485444.html
  2. 运行时间 : 0.211465s [ 吞吐率:4.73req/s ] 内存消耗:4,696.08kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=dc27c88acdf2439056b544f81bdfa0a3
  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.001056s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001532s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000771s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000750s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001740s ]
  6. SELECT * FROM `set` [ RunTime:0.000609s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001809s ]
  8. SELECT * FROM `article` WHERE `id` = 485444 LIMIT 1 [ RunTime:0.001241s ]
  9. UPDATE `article` SET `lasttime` = 1776379673 WHERE `id` = 485444 [ RunTime:0.016129s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000757s ]
  11. SELECT * FROM `article` WHERE `id` < 485444 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.003522s ]
  12. SELECT * FROM `article` WHERE `id` > 485444 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000991s ]
  13. SELECT * FROM `article` WHERE `id` < 485444 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.007471s ]
  14. SELECT * FROM `article` WHERE `id` < 485444 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.005716s ]
  15. SELECT * FROM `article` WHERE `id` < 485444 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.003242s ]
0.215282s