当前位置: 首页 > news >正文

从 ps -ef 之后怎么获得这个进程的更多信息

Linux 进程深度侦察教程:从 ps -ef/proc

当你使用 ps -ef 筛选出一个进程后,你仅仅是拉开了侦察的序幕。真正的宝藏——进程的详细上下文信息——存储在 /proc 文件系统中。

本教程将以你提供的 ps -ef | grep python 输出为例,手把手教你如何从一个 PID (进程 ID) 出发,获取关于该进程的四项核心信息。

步骤一:初始侦察与目标锁定

我们从你的初始命令开始:

indemind@dl:/data$ ps -ef | grep python

输出结果:

root      1053     1  0 10月24 ?      00:00:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
root      1315     1  0 10月24 ?      00:00:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
root     17870 17783  0 11月10 ?      00:02:41 python3 -m vllm.entrypoints.openai.api_server --model /data/vllm/model/gte_Qwen2-7B-instruct ...
root     17952 17782  0 11月10 ?      00:02:25 python3 -m vllm.entrypoints.openai.api_server --model /data/vllm/model/Qwen3-4B ...
root     21126 17870  0 11月10 ?      00:00:00 /usr/bin/python3 -c from multiprocessing.resource_tracker import main;main(20)
root     21127 17870  1 11月10 ?      00:16:49 /usr/bin/python3 -c from multiprocessing.spawn import spawn_main; spawn_main(tracker_fd=21, pipe_handle=23) --multiprocessing-fork
root     21525 17952  0 11月10 ?      00:00:00 /usr/bin/python3 -c from multiprocessing.resource_tracker import main;main(27)
root     21526 17952  1 11月10 ?      00:18:47 /usr/bin/python3 -c from multiprocessing.spawn import spawn_main; spawn_main(tracker_fd=28, pipe_handle=30) --multiprocessing-fork
indemind 32744  8006  0 17:32 pts/3    00:00:00 grep --color=auto python

解读 ps -ef 输出

ps -ef 的输出包含关键信息,我们首先要学会解读它:

列名含义示例 (来自 PID 17870)
UID命令执行者 (用户)root
PID进程 ID (Process ID)17870
PPID父进程 ID (Parent PID)17783
CCPU 占用率 (简略)0
STIME启动时间11月10
TTY关联的终端? (无终端)
TIME累计 CPU 时间00:02:41
CMD命令python3 -m vllm...

目标锁定:

  • 目标进程: 我们选择 vllm 的 API 服务器作为分析对象,其 PID17870
  • 忽略进程: PID 32744grep 命令本身,应忽略。

步骤二:⚠️ 权限检查(关键一步)

在深入分析之前,我们必须检查权限:

  • 你的用户: indemind@dl (从命令提示符 indemind@dl:/data$ 看出)。
  • 进程的用户: root (从 ps -ef 输出的第一列 UID 看出)。

结论: 目标进程 (PID 17870) 是由 root 用户运行的。而你当前的用户是 indemind

这意味着: Linux 的安全机制会阻止你(indemind)查看另一个用户(root)的进程的详细内部信息。因此,在后续所有查询 /proc 目录的命令前,你都必须加上 sudo 来临时获取 root 权限。

步骤三:深入 /proc 获取四项核心信息

ps 命令只是一个摘要。PID 是打开 /proc 宝库的钥匙。proc 目录下的每一个数字文件夹都对应一个正在运行的进程。

我们将以 PID 17870 为例。

1. 命令执行者 (User)

这个信息 ps -ef 已经直接告诉你了。

  • 分析: ps -ef 输出的第一列 UID 就是 root。无需额外命令。

2. 命令执行时间 (Start Time)

ps -efSTIME (11月10) 字段只给出了日期,不够精确。要获取精确到秒的完整启动时间戳,我们使用 ps-o (output format) 选项。

  • 命令:
    ps -p 17870 -o lstart
    
  • 示例输出:
    STARTED
    Fri Nov 10 09:30:15 2025 
    
    (注:此时间为示例,它会显示进程启动的精确时刻)

3. 命令执行时的 PWD (Current Working Directory)

要查看进程当前的工作目录 (Current Working Directory, CWD),你需要查看 /proc/[PID]/cwd。这是一个特殊的符号链接 (symlink)。

  • 命令:
    # 因为进程是 root 运行的,所以你需要 sudo
    sudo ls -l /proc/17870/cwd
    
  • 示例输出:
    lrwxrwxrwx 1 root root 0 Nov 11 17:40 /proc/17870/cwd -> /data
    
  • 分析:
    输出 -> /data 清楚地表明,PID 17870 进程的当前工作目录是 /data。这解释了为什么命令中可以使用 /data/vllm/model/... 这样的相对路径(如果它用了的话)。

4. 命令执行时的环境变量 (Environment Variables)

进程启动时加载的所有环境变量都存储在 /proc/[PID]/environ 文件中。

注意: 这个文件不是普通的文本文件。它使用 \0 (null 字符) 而不是换行符来分隔变量。如果你直接 cat 它,会得到一团乱码。

你需要使用 stringstr 命令来正确地查看它。

  • 命令 (推荐使用 strings):

    # 同样需要 sudo
    sudo strings /proc/17870/environ
    
  • 示例输出:

    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    HOME=/root
    USER=root
    SHELL=/bin/bash
    LD_LIBRARY_PATH=/usr/local/cuda/lib64
    ...
    
  • 分析:
    这里列出了进程可用的所有环境变量。如果你在排查问题(例如 “为什么我的 Python 库找不”),检查这里的 PATHPYTHONPATHLD_LIBRARY_PATH 会非常有用。

  • 过滤特定变量:

    # 示例:只查看 PATH 变量
    sudo strings /proc/17870/environ | grep '^PATH='
    

步骤四:额外收获 —— 分析父子进程关系 (PPID)

在你的 ps -ef 输出中,你是否注意到了 PIDPPID (父进程 ID) 之间的关系?

  • root 17870 17783 ... python3 -m vllm ... (这是我们的目标父进程)
  • root 21126 17870 ... /usr/bin/python3 -c ...
  • root 21127 17870 ... /usr/bin/python3 -c ...

分析:
进程 2112621127PPID 都是 17870

这清楚地表明,vllm API 服务器 (PID 17870) 是父进程,它在运行过程中启动了至少两个子进程 (PID 21126 和 21127)。

从子进程的 CMD (包含 multiprocessing.resource_trackermultiprocessing.spawn) 来看,我们可以推断出 vllm 正在使用 Python 的 multiprocessing 库来创建工作进程,这可能是为了处理并发请求或高效利用多核 CPU / GPU。

步骤五:探索 /proc 宝库中的更多情报

cwdenviron 只是冰山一角。/proc/[PID]/ 目录还包含许多有用的信息:

1. exe (Executable) - 进程的“真身”

ps 命令显示的 CMD (如 python3 -m vllm...) 是进程启动时的命令。而 exe 是一个符号链接,指向真正在磁盘上运行的可执行文件

  • 命令:
    # 别忘了 sudo
    sudo ls -l /proc/17870/exe
    
  • 示例输出:
    lrwxrwxrwx 1 root root 0 Nov 11 17:45 /proc/17870/exe -> /usr/bin/python3.10
    
  • 分析:
    这非常有用!它告诉你,vllm 服务实际上是由 /usr/bin/python3.10 这个具体的 Python 解释器来运行的。如果你的系统上有多个 Python 版本,这可以帮你确定是哪个在工作。

2. cmdline (Command Line) - 完整的命令行

ps -ef 有时会截断过长的命令。/proc/[PID]/cmdline 文件包含完整的、未截断的命令行参数,同样以 \0 (null 字符) 分隔。

  • 命令:
    # 使用 strings 或 tr
    sudo strings /proc/17870/cmdline
    # 或者
    sudo tr '\0' ' ' < /proc/17870/cmdline ; echo
    
  • 示例输出:
    python3
    -m
    vllm.entrypoints.openai.api_server
    --model
    /data/vllm/model/gte_Qwen2-7B-instruct
    --host
    0.0.0.0
    ... (所有参数) ...
    
  • 分析:
    当你需要复制一个进程的完整启动命令时,这里是最可靠的信息来源。

3. status (Status) - 人类可读的状态摘要

这是一个人类可读的(非乱码)文件,提供了进程状态的快照,包括内存使用情况、用户/组 ID、运行状态等。

  • 命令:
    sudo cat /proc/17870/status
    
  • 示例输出 (节选):
    Name:   python3
    State:  S (sleeping)
    Pid:    17870
    PPid:   17783
    Uid:    0       0       0       0
    Gid:    0       0       0       0
    VmRSS:           123456 kB  <-- 重要的:实际物理内存占用
    ...
    
  • 分析:
    VmRSS (Resident Set Size) 是排查内存泄漏时一个非常有用的指标,它显示了进程当前实际占用了多少物理内存 (RAM)。

4. fd (File Descriptors) - 进程打开的所有“管道”

fd 是一个目录,包含了进程当前打开的所有文件描述符 (File Descriptors)。这包括它打开的文件、网络连接、管道等。

  • 命令:
    # ls -l 这个目录
    sudo ls -l /proc/17870/fd
    
  • 示例输出:
    lrwx------ 1 root root 64 Nov 11 17:50 0 -> /dev/null
    lrwx------ 1 root root 64 Nov 11 17:50 1 -> /var/log/vllm-server.log
    lrwx------ 1 root root 64 Nov 11 17:50 2 -> /var/log/vllm-server.log
    lrwx------ 1 root root 64 Nov 11 17:50 10 -> /data/vllm/model/gte_Qwen2-7B-instruct/config.json
    lrwx------ 1 root root 64 Nov 11 17:50 11 -> /data/vllm/model/gte_Qwen2-7B-instruct/model.safetensors
    lrwx------ 1 root root 64 Nov 11 17:50 12 -> socket:[1234567]
    
  • 分析:
    • 0, 1, 2 分别是标准输入、标准输出和标准错误。这里它们都重定向到了日志文件 /var/log/vllm-server.log
    • 1011 显示进程正在读取模型文件!
    • 12 显示了一个网络套接字 (socket),这表明 vllm 正在监听网络端口(符合 API 服务器的身份)。
    • lsof (List Open Files) 命令就是通过读取这个目录来实现其功能的。

总结:你的进程侦察工具箱

ps -ef 给了你 PID,而 PID 就是打开 /proc 宝库的钥匙。

你想知道什么使用什么命令 (以 PID 17870 为例)
执行者 (User)ps -ef (第一列 UID,即 root)
精确启动时间ps -p 17870 -o lstart
工作目录 (PWD)sudo ls -l /proc/17870/cwd
所有环境变量sudo strings /proc/17870/environ
特定环境变量sudo strings /proc/17870/environ | grep 'VAR_NAME='
可执行文件真身sudo ls -l /proc/17870/exe
完整的命令行sudo strings /proc/17870/cmdline
内存/状态摘要sudo cat /proc/17870/status (查看 VmRSS 等)
打开的文件/网络sudo ls -l /proc/17870/fd (或 sudo lsof -p 17870)
http://www.dtcms.com/a/598497.html

相关文章:

  • Tkinter Canvas 方案和OpenCV+PIL 方案的差别
  • 深入解析socket函数:从服务端创建到内核实现原理
  • 吴江住房城乡建设局网站广州专业建网站公司
  • 网站上的美工图片要怎么做做物理的网站
  • 找单位做网站需要注意什么手机建站程序源码
  • 做服务器的网站都有哪些淄博乐达网站建设吧
  • 电子商城网站开发价格江苏网站建设开发
  • 做网站用是内网穿透好美食的网页设计
  • OCR与AI赋能医药资质审核的全流程自动化方案
  • wordpress代码实现头像公众号seo排名
  • docker进阶---docker底层实践2025
  • TCP、UDP 和串口通信-学习笔记
  • 句容市建设工程管理处网站国内p2p网站建设
  • 中国建设银行河南省分行网站抚州市城乡建设局网站
  • 网站建设创业珠海市横琴建设局网站
  • 基于SpringBoot的课程管理系统【智能推荐算法+可视化统计+教师课程报名排行榜】
  • 360网站推广做商务网站需要什么资料
  • 宁波网站建设设计至诚服务wordpress 分类目录下不显示文章
  • 深入解析 IP 协议:从基础核心机制到地址管理、路由选择的全方位指南
  • 邢台网站建设03191688版面设计软件
  • mysql5.7安装教程
  • P1919 【模板】高精度乘法 | A*B Problem 升级版 (FFT)
  • 网页游戏网站开发wordpress5.0.2安装
  • 阜新市建设学校管方网站注册保险代理公司需要什么条件
  • Plant Simulation 双深位立库开发系列教程-出库操作
  • python网站开发的优势wordpress 图集
  • 广州网站设计实力乐云seowordpress token插件
  • ofo的网站用什么做的app设计大赛
  • day11(11.11)——leetcode面试经典150
  • 十八个免费的舆情网站怎么做app推广