tini参数选项完全清单:-v -s -g -e -p -w 6大核心参数详解
tini参数选项完全清单-v -s -g -e -p -w 6大核心参数详解【免费下载链接】tiniA tiny but valid init for containers项目地址: https://gitcode.com/gh_mirrors/ti/tinitini 是一款专为容器设计的轻量级 init 进程PID 1它的核心职责只有一个托管你启动的程序负责回收僵尸进程并正确转发信号。对新手来说tini 的全部玩法就浓缩在 6 个参数选项里——-v、-s、-g、-e、-p、-w。本文带你逐一看懂 tini 参数选项让你 5 分钟掌握这个容器 init 工具的正确打开方式 为什么容器需要 tini 这样的 init 进程直接让业务进程当 PID 1 会有两个经典问题僵尸进程堆积容器里产生的僵尸进程无人回收时间一长会耗尽 PID 资源信号转发失效SIGTERM等默认信号处理在 PID 1 上不会生效导致docker stop时进程杀不死。tini 用约 10KB 的极小体积解决了这两个问题它先fork出你的程序然后不断回收僵尸、把收到的信号转发给子进程并在子进程退出后以相同退出码退出。使用 Docker 时docker run --init本质上就是用 tini 这类 init 进程来托管你的容器。6 大核心参数速查表参数作用等价环境变量典型场景-v提高日志详细度最多重复 3 次TINI_VERBOSITY调试问题-s注册为子进程 subreaperTINI_SUBREAPER非 PID 1 运行时回收僵尸-g向子进程组发送信号TINI_KILL_PROCESS_GROUPCtrl-C 要一击必杀整个进程树-e把指定退出码重映射为 0可重复无修复 Java 等程序的非零退出码-p父进程退出时触发指定信号无父进程异常退出时自杀-w回收僵尸进程时打印警告无排查僵尸进程来源参数解析逻辑位于 src/tini.c完整选项字符串定义在 src/tini.c。参数一-v 调整日志详细度默认情况下 tini 只输出警告WARN级别日志。加上-v可以逐级提升详细度最多重复 3 次-vvv分别对应 INFO、DEBUG、TRACE 级别-v看到子进程启动、退出码等 INFO 信息-vv额外看到信号转发、进程回收等 DEBUG 细节-vvv连sigtimedwait这类 TRACE 级循环日志都会打印。也可以用环境变量TINI_VERBOSITY设置初始详细度默认值定义在 src/tini.c。当某次容器行为不符合预期时先-v一遍再复现是排查 tini 问题的第一步 ️参数二-s 注册为进程 subreapertini 回收僵尸进程的前提是僵尸要能重新挂靠到它身上。通常这靠运行在 PID 1 位置实现但如果你无法让 tini 当 PID 1例如套在另一层启动脚本外面就需要-s参数传递-s如tini -s -- ...或设置环境变量TINI_SUBREAPER变量名定义见 src/tini.c。两种方式都是调用prctl(PR_SET_CHILD_SUBREAPER)把自己注册为子进程 subreaper要求 Linux 内核 3.4注册逻辑见 src/tini.c。 小贴士如果 tini 既不是 PID 1 又没注册 subreaper启动时会打印一条 Zombie processes will not be re-parented to Tini 的警告没看到警告说明你的配置没问题。参数三-g 向子进程组发送信号默认情况下 tini 只把信号转发给它的直接子进程。这在某些场景下不够用docker run --rm --entrypoint tini krallin/ubuntu-tini sh -c sleep 10按 Ctrl-C 后SIGINT只发给了sh而sh在等sleep时并不理会它——看起来像是按了没反应。加上-g或设置TINI_KILL_PROCESS_GROUP变量名见 src/tini.c后tini 会把信号发给整个子进程组效果与终端里 Ctrl-C 打到前台进程组一致sh和sleep一起被终止。信号转发处的关键代码在 src/tini.ckill(kill_process_group ? -child_pid : child_pid, sig.si_signo)参数四-e 重映射退出码tini 默认透传子进程退出码被信号杀死时返回128 信号号。但有些程序退出码并不诚实最典型的是 Java 应用收到SIGTERM后以 143 退出导致容器编排平台误判为启动失败。用-e可以把任意退出码0~255重映射为 0并且可以重复使用tini -e 143 -e 137 -- /path/to/app解析函数add_expect_status会校验取值范围0~255在子进程退出时若命中重映射表就把退出码改写为 0实现位于 src/tini.c。参数五-p 设置父进程死亡信号-p参数让 tini 调用prctl(PR_SET_PDEATHSIG)设置父进程死亡信号当 tini 的父进程退出时内核会自动向 tini 发送你指定的信号如-p SIGKILLtini -p SIGTERM -- /path/to/app支持的信号名以SIG开头完整信号表SIGHUP ~ SIGSYS定义在 src/tini.c。常见用途是把 tini 挂在某个会话管理器或 shell 之下运行父进程意外消失时 tini 带着子进程一起善后避免留下孤儿进程。参数六-w 回收进程时打印警告正常情况下僵尸进程被回收是静默的加上-w后tini 每回收一个非主子的僵尸进程都会打印一条 WARN[WARN tini (123)] Reaped zombie process with pid456这在排查是谁在偷偷创建僵尸进程时非常有用——警告信息本身会暴露出僵尸的 PID方便你反查对应的代码路径。对应实现见 src/tini.c。顺手掌握其余选项与环境变量除 6 个核心参数外tini 还提供源码清单见 src/tini.c--version输出版本号并退出-h打印帮助信息用法tini [OPTIONS] PROGRAM -- [ARGS]-l打印许可证后退出。环境变量与参数的对应关系TINI_SUBREAPER≈-sTINI_KILL_PROCESS_GROUP≈-gTINI_VERBOSITY≈-v。快速上手Docker 中的推荐写法最省心的接法是把 tini 设为 entrypoint参数放在--之前程序放--之后ENTRYPOINT [/tini, -s, -g, --] CMD [/your/program, -and, its, arguments]⚠️ 注意--分隔符建议永远带上。如果看到tini: invalid option之类的报错多半是程序自己的参数被 tini 误当成自己的选项了加上--即可解决。已有 entrypoint 脚本也能无缝套用ENTRYPOINT [/tini, --, /docker-entrypoint.sh]。完整使用说明可参考 README.md 与 README.md 的 Options 章节。常见问题FAQQ1参数顺序有讲究吗tini 自身的选项放在程序名之前例如tini -v -e 143 -- app -x。程序及其参数放在--之后最安全。Q2-s和 PID 1 二选一两者都能保证僵尸被正确回收运行在 PID 1 时-s无需添加。Q3多个-e如何生效每个-e独立生效命中任一重映射码都会归零适合为不同信号退出码分别兜底。Q4看不到警告就代表配置正确是的。tini 启动时会自检reaper_check见 src/tini.c非 PID 1 且未注册 subreaper 才告警没告警即说明僵尸回收链路健康 ✅小结tini 的参数选项并不多但每个都精准对应容器运行的真实痛点-v帮你看清行为-s解决非 PID 1 的僵尸回收-g让信号覆盖整个进程组-e修正退出码-p处理父进程异常退出-w辅助定位僵尸来源。把这 6 个参数记住你就能在任何容器场景下正确使用 tini 这个小而完整的 init 进程了。【免费下载链接】tiniA tiny but valid init for containers项目地址: https://gitcode.com/gh_mirrors/ti/tini创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

RK3568嵌入式Linux开发:NFS rootfs挂载实战与调试效率提升

RK3568嵌入式Linux开发:NFS rootfs挂载实战与调试效率提升

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 8:58:02 阅读更多 →
CLI驱动的Git代码审查工作流:LLM+Diff+上下文感知

CLI驱动的Git代码审查工作流:LLM+Diff+上下文感知

1. 项目概述:这不是一个“工具”,而是一套可落地的代码审查新工作流“open-code-review”这个词乍看像某个开源项目名,但结合当前搜索热词里反复出现的CLI、LLM、Git、codex cli、trae cli、dify 的 SQL 查询不稳定、llm 返回 JSON 的 Java 库…

2026/9/19 8:57:02 阅读更多 →
Windows AI编程环境搭建指南:Node.js、VS Code与Git配置

Windows AI编程环境搭建指南:Node.js、VS Code与Git配置

1. 为什么要在 Windows 上认真搭一套 AI 编程环境很多人第一次接触 AI 编程,注意力全在模型和提示词上,环境搭建这一步往往被当成“装个软件”草草带过。结果就是:代码补全插件时灵时不灵,终端里跑个脚本报一堆路径错误&#xff0…

2026/9/19 8:57:02 阅读更多 →

最新新闻

ESP32音频播放原理:I2S信号链、WAV格式与DAC硬件协同

ESP32音频播放原理:I2S信号链、WAV格式与DAC硬件协同

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 9:57:26 阅读更多 →
CANN opbase 错误码 EZ1011(Invalid_Argument_Null_Pointer)空指针参数校验与排查指南

CANN opbase 错误码 EZ1011(Invalid_Argument_Null_Pointer)空指针参数校验与排查指南

CANN opbase 错误码 EZ1011(Invalid_Argument_Null_Pointer)空指针参数校验与排查指南 【免费下载链接】opbase 本项目是CANN算子库的基础框架库,为算子提供公共依赖文件和基础调度能力。 项目地址: https://gitcode.com/cann/opbase …

2026/9/19 9:57:26 阅读更多 →
Hoppscotch:开源 API 调试工具完整上手指南

Hoppscotch:开源 API 调试工具完整上手指南

Hoppscotch:开源 API 调试工具完整上手指南 【免费下载链接】hoppscotch Open-Source API Development Ecosystem • https://hoppscotch.io • Offline, On-Prem & Cloud • Web, Desktop & CLI • Open-Source Alternative to Postman, Insomnia 项目地…

2026/9/19 9:57:26 阅读更多 →
链表题解方法论:leetcode 仓库链表专题「一个原则、两个考点、三个注意、四个技巧」实战指南

链表题解方法论:leetcode 仓库链表专题「一个原则、两个考点、三个注意、四个技巧」实战指南

链表题解方法论:leetcode 仓库链表专题「一个原则、两个考点、三个注意、四个技巧」实战指南 【免费下载链接】leetcode LeetCode Solutions: A Record of My Problem Solving Journey.( leetcode题解,记录自己的leetcode解题之路。) 项目地址: https:…

2026/9/19 9:57:26 阅读更多 →
BrewUI:给Homebrew装上可视化控制台,让macOS包管理更省心

BrewUI:给Homebrew装上可视化控制台,让macOS包管理更省心

如果你每天吃饭睡觉打代码都离不开 macOS,大概率绕不开 Homebrew。它确实是目前 macOS 上最主流的包管理器,但用久了之后,我总觉得缺点什么:装的东西越来越多,哪些版本旧了、哪些依赖没人要了、缓存还能清出多少空间&a…

2026/9/19 9:57:26 阅读更多 →
算子优化 Agent 接手 FlashMLA,TaoToken Key 记在哪

算子优化 Agent 接手 FlashMLA,TaoToken Key 记在哪

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 9:56:26 阅读更多 →

日新闻

BP神经网络时序预测:滑窗长度与多窗口平均策略

BP神经网络时序预测:滑窗长度与多窗口平均策略

简介:面向机器学习、深度学习与数据建模学习者的一份完整研究文献,聚焦BP神经网络在农业产量预测中的应用。文档以1980—2018年全国棉花产量为样本,系统讲解数据归一化处理、激活函数原理、多层神经网络结构搭建及训练流程,展示敏…

2026/9/19 0:00:30 阅读更多 →
Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

上个月调一个Deformable DETR模型,在单卡上要跑将近两天。第二天早上我下意识打开终端翻日志,发现loss从凌晨两点就开始往上爬,一路从0.8涨到1.35,整整六个小时没人发现。那六个小时的训练不仅白跑,还霸占着卡——等于…

2026/9/19 0:00:30 阅读更多 →
OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南 【免费下载链接】opencloud 🌤️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign. 项目地址: htt…

2026/9/19 0:00:30 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/19 3:59:36 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/19 3:53:08 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/19 4:02:43 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →