每个进程启动时的环境变量保存在/proc/[pid]/environ中,以空字符分隔,需用tr或strings解析;命令行参数存于/proc/[pid]/cmdline,同样需转换格式;查看前需获取PID,常用pgrep、ps、pidof等命令。

直接查看进程启动时的环境变量
每个运行中的进程,其启动时刻的环境变量都保存在 /proc/[pid]/environ 文件中。这个文件以空字符(\0)分隔各条 KEY=VALUE 记录,所以不能直接用 cat 读取——会显示成一长串连在一起的内容。
正确做法是配合 tr 或 strings 命令转换格式:
tr '\0' '\n' —— 把空字符换成换行,每行一个变量-
strings /proc/1234/environ—— 提取所有可打印字符串,效果类似
注意:需有权限读取该进程的 /proc 目录(通常是进程所有者或 root),且进程退出后该文件立即消失。
先找到目标进程的 PID
要查某个具体进程,得先知道它的 PID。常用方法有:
-
pgrep -f "进程名或命令行片段"—— 支持模糊匹配,推荐用于带参数的进程 -
ps aux | grep "进程名"—— 看完整列表,注意过滤掉grep自身那行 -
pidof 进程名—— 适用于已知确切二进制名的情况(如pidof nginx)
同时查看启动参数(命令行)
进程的完整启动命令行(即 argv)存于 /proc/[pid]/cmdline,同样以空字符分隔。
查看方式与 environ 类似:
tr '\0' ' ' —— 用空格连接各参数,还原成命令行样式-
cat /proc/1234/cmdline | xargs -0 echo—— 更健壮地处理含空格或特殊字符的参数
例如,某 Java 进程的 cmdline 可能显示为:/usr/bin/java -Xms512m -jar /app/service.jar --port=8080。
快速组合查询(推荐日常使用)
如果只想一步到位看某个进程的环境和参数,可以写个简短命令:
for p in $(pgrep -f "nginx"); do echo "== PID $p =="; tr '\0' '\n' /dev/null | head -5; echo "(cmdline)"; tr '\0' ' ' /dev/null; done
这样能同时确认进程是否还在、环境变量关键项(如 PATH、HOME)、以及它实际是以什么参数启动的——对排查服务配置错误特别有用。











