在 unix/linux 系统中,sigterm(信号 15)是一种优雅的进程终止方式,允许程序在关闭前进行必要的清理工作。sigterm 可以通过 kill 命令发送,默认情况下,kill [id] 会向指定进程发送 sigterm。如果进程位于 docker 容器内,接收到 sigterm 后会显示退出码 143。
SIGKILL(信号 9)则是一种强制终止信号,无法被进程忽略或处理,立即结束进程,可能会导致数据丢失或损坏。接收到 SIGKILL 的 Docker 容器会显示退出码 137。
在 Kubernetes 中,SIGTERM 用于优雅地终止 pod。当 pod 被终止时,Kubernetes 会发送 SIGTERM,并在默认的 30 秒宽限期后发送 SIGKILL。此外,Kubernetes 提供了 preStop 钩子,允许在发送 SIGTERM 前执行关闭操作,以确保优雅终止。
处理僵尸进程需要注意,这些进程在 CMD 列中显示为 defunct,它们虽然不再执行但仍占用进程 ID。僵尸进程会一直存在,直到父进程结束或系统重启。通过忽略 SIGCHLD 信号,可以避免僵尸进程的累积。
对于 Kubernetes 用户,pod 的终止过程包括设置 Terminating 状态、执行 preStop 钩子、发送 SIGTERM 以及在宽限期后发送 SIGKILL。处理 SIGTERM 和 preStop 钩子是确保 pod 优雅终止的关键,避免影响用户体验。
在 NGINX Ingress Controller 的情况下,处理 SIGTERM 可能导致立即关闭,而非优雅终止。使用 preStop 钩子发送 SIGQUIT 信号可以解决这个问题,确保 NGINX 能够正常关闭。
与 SIGTERM 相关的错误会在 Kubernetes 中触发,表现为 pod 关闭和容器退出码 143 或 137。特别是 OOMKilled 错误会直接触发 SIGKILL,无需 SIGTERM 和宽限期。
了解和正确处理 SIGTERM 和 SIGKILL 对管理 Unix/Linux 系统和 Kubernetes 集群至关重要,确保系统和应用程序的稳定性和可靠性。
以上就是[译] SIGTERM:Linux 容器的优雅终止(退出代码 143)的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号