# PR #21401 完整报告

- 仓库：`sgl-project/sglang`
- 标题：[CI] Add PID namespace and ps auxf diagnostics to killall.py
- 合并时间：2026-03-26 14:57
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/21401

---

# 执行摘要
本 PR 通过增强 `killall.py` 脚本的诊断能力，添加 PID 命名空间检查和 `ps auxf` 输出，解决了 CI 中因容器共享 GPU 导致进程清理失败的问题。变更针对 CI 环境调试，提升问题定位效率，风险包括 Linux 依赖和错误处理改进。

# 功能与动机
动机源于 CI 中反复出现的 GPU 内存清理失败问题：当 `nvidia-smi` 报告的 PID 无法被杀死时，脚本无法识别进程是否属于其他容器。PR body 指出："Helps diagnose the recurring CI issue where GPU memory stays dirty but the reported PID cannot be killed"，通过在 kill 失败时输出命名空间信息和进程列表，帮助诊断容器间进程归属。

# 实现拆解
主要修改文件为 `python/sglang/cli/killall.py`，实现拆解如下：
- **新增函数**：
 - `_check_pid_namespace`：检查 PID 是否在同一命名空间，通过读取 `/proc/*/ns/pid` 实现。
 - `_log_ps_diagnostic`：运行 `ps auxf` 并过滤输出 SGLang 相关进程。
 - `_find_sglang_pids_by_name`：扫描 `/proc` 目录匹配进程命令，捕获 nvidia-smi 不可见的进程。
- **修改函数**：`_kill_pids` 集成诊断逻辑，在 kill 失败时调用新函数，并添加重试循环和日志缓冲。
- **辅助改进**：引入 `_LOG_LINES` 缓冲区、`_log` 和 `_flush_box` 函数格式化输出，使用正则表达式 `_SGLANG_PROCESS_PATTERNS` 匹配进程。
- **commits 演进**：从初始添加功能到重构、改善错误处理和添加 nvidia-smi 版本日志，显示多次迭代优化。

# 评论区精华
review 中 gemini-code-assist[bot] 提出了关键改进建议：
> "To make this function more robust, it's better to catch the general `OSError` here instead of only `PermissionError`."
> "Enhance the except block to log the stderr from the failed command, which would help with debugging."
讨论聚焦于代码健壮性，建议已被考虑但未明确采纳状态，PR 整体加强了错误处理和诊断输出。

# 风险与影响
**风险**：
- **兼容性风险**：依赖 Linux `/proc` 文件系统，在非 Linux 环境可能失败。
- **错误处理风险**：review 指出的 OSError 捕获和 ps 命令错误处理不完善，可能导致脚本崩溃或误导日志。
- **性能风险**：新增进程扫描和日志输出在进程多时可能引入开销。

**影响**：
- **系统影响**：提升 CI 清理失败诊断能力，减少故障时间，增强 CI 稳定性。
- **团队影响**：为开发者和运维提供更佳调试工具，促进 CI 维护效率，但对终端用户透明。

# 关联脉络
与近期 CI 相关 PR 关联紧密：
- **PR #21455**（简化 CI 检查）：同属 CI 基础设施优化，共享减少 CI 失败的目标。
- **PR #21423**（修复 AMD CI 容器问题）：涉及容器环境修复，与本 PR 的容器诊断主题相关。
- **PR #21385**（收窄 CI 触发）：优化 CI 流程，与本 PR 的调试增强相辅相成。
这些 PR 共同反映了仓库在 CI 稳定性和工具改进上的持续演进。