You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux内核4.x+下如何从Docker容器内部获取宿主机PID?

获取容器内进程对应的宿主机PID(内核4.x+环境)

为什么旧方法失效

Linux内核4.x之后,为了强化PID namespace的隔离性,/proc/[pid]/sched文件中不再暴露宿主机的真实PID,仅显示容器内的本地PID,这就是你在RHEL8+Docker20.10环境下旧方法失效的原因。

可行的替代方法

利用/proc/[pid]/status文件中的NSpid字段,该字段会列出进程在所有层级PID namespace中的PID值,第一个数值即为宿主机的真实PID,第二个是容器内的本地PID。

操作步骤

  1. 在容器内确定目标进程的本地PID,比如你提到的sleep进程PID为37。

  2. 执行以下命令提取宿主机PID:

    grep NSpid /proc/37/status
    

    输出示例:

    NSpid: 27062 37
    其中27062就是宿主机上对应的真实PID。

  3. 也可以用awk直接提取宿主机PID:

    awk '/NSpid/ {print $2}' /proc/37/status
    

注意事项

  • 该方法无需特殊权限,只要容器未被限制访问/proc文件系统(Docker默认允许)即可使用。
  • NSpid字段是Linux内核3.8版本后引入的,RHEL8的4.18内核完全支持。

内容的提问来源于stack exchange,提问作者Muzammil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 17:46:08