如何监听System.exit(0)的调用栈

Kotlin 复制代码
private fun installShutdownHookForDebug() {
    try {
        Runtime.getRuntime().addShutdownHook(
            Thread(
                {
                    try {
                        val stacks = Thread.getAllStackTraces()
                        Log.e("ExitHook", "VM shutdown hook running, threads=${stacks.size}")
                        for ((thread, stack) in stacks) {
                            Log.e(
                                "ExitHook",
                                "thread='${thread.name}' state=${thread.state} daemon=${thread.isDaemon} id=${thread.id}\n" +
                                    stack.joinToString(separator = "\n") { "  at $it" }
                            )
                        }
                    } catch (t: Throwable) {
                        Log.e("ExitHook", "Failed dumping thread stacks", t)
                    }
                },
                "ExitHook",
            ),
        )
        Log.i("ExitHook", "Installed shutdown hook (debug only)")
    } catch (t: Throwable) {
        Log.w("ExitHook", "Failed to install shutdown hook", t)
    }
}

在Application中的oncreate中调用就行

经过测试我看到了如下日志

Kotlin 复制代码
2025-12-31 17:41:36.556 20049-20217 ExitHook                com.omnicast.androidtv               E  thread='Thread-11' state=WAITING daemon=false id=739 (Explain with AI)
                                                                                                      at java.lang.Object.wait(Native Method)
                                                                                                      at java.lang.Object.wait(Object.java:422)
                                                                                                      at java.lang.Thread.join(Thread.java:1262)
                                                                                                      at java.lang.Thread.join(Thread.java:1338)
                                                                                                      at java.lang.Runtime.exit(Runtime.java:160)
                                                                                                      at java.lang.System.exit(System.java:1496)
                                                                                                      at xxxx.run(Unknown Source:44)
相关推荐
RisunJan10 分钟前
Linux命令-skill(发送信号给进程)
linux·运维·服务器
changjiahong16 分钟前
lvs总结
服务器·数据库·lvs
一水23 分钟前
TTFT优化:一个方案的5次推倒重来
java·ai·状态模式
AC赳赳老秦29 分钟前
CSDN 技术社区数据采集:OpenClaw 抓取公开技术热帖,生成领域技术热点周报
java·大数据·前端·数据库·python·php·openclaw
结网的兔子37 分钟前
【前端开发】Web端迁移至 uni-app 及鸿蒙扩展方案对比
前端·uni-app·harmonyos
孪生质数-1 小时前
AI 应用实践篇——让大模型真正开始工作
linux·运维·服务器·人工智能·深度学习·语言模型·llama
磁爆步兵1 小时前
内存分区:程序运行的核心秘密
java·开发语言·jvm
水瓶夜之1 小时前
.NET 中的新增功能系列文章——.NET SDK中的新增功能
前端·chrome·.net
zcmodeltech1 小时前
智能矿井沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的感知-传输-控制一体化方案
服务器·数据库·分布式·stm32·单片机·嵌入式硬件
流星白龙2 小时前
【Docker】4.NameSpace空间隔离实战
java·运维·docker