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

为何不同Ubuntu环境下执行/proc/1/exe --version结果存在差异?

为什么/proc/1/exe --version在本地Ubuntu和upstart容器中结果不同?

这是因为/proc/1/exe是指向系统(或容器)中PID为1的进程的可执行文件的符号链接,而PID 1进程在你的本地机器和Docker容器里完全不一样:

1. 本地Ubuntu 16.04环境

Ubuntu 16.04默认使用systemd作为初始化(init)系统,所以系统启动后PID 1的进程就是systemd。当你执行:

sudo /proc/1/exe --version

本质上是直接调用了systemd的可执行文件并传入--version参数,所以输出的自然是systemd的版本信息:

systemd 229 +PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN

2. ubuntu-upstart Docker容器环境

ubuntu-upstart镜像虽然是基于upstart初始化系统构建的,但如果你的容器启动时没有指定以upstart作为PID 1进程(比如你直接启动了bash进入容器),那么容器内的PID 1进程就是bash。这时候/proc/1/exe指向的是bash的可执行文件,执行--version参数就会输出bash的版本信息:

GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu) Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later ...

验证方法

你可以在容器里执行ps -p 1来确认PID 1的进程是什么:

ps -p 1

如果输出显示进程是bash,那就对应了你看到的结果;如果要让容器以upstart作为PID 1,你需要在启动容器时指定对应的命令(比如/sbin/init),这时候再执行/proc/1/exe --version就会得到upstart的版本信息了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:05:36