如何自定义nvidia-smi输出以显示进程PID对应的用户名?
查看GPU进程对应的用户名
首先,你给出的nvidia-smi输出确实只展示了GPU进程的PID、进程名和显存占用:
Thu May 10 09:05:07 2018 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 384.111 Driver Version: 384.111 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 GeForce GTX 108... Off | 00000000:0A:00.0 Off | N/A | | 61% 74C P2 195W / 250W | 5409MiB / 11172MiB | 100% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | 0 5973 C ...master_JPG/build/tools/program_pytho.bin 4862MiB | | 0 46324 C python 537MiB | +-----------------------------------------------------------------------------+
要获取每个PID对应的用户名,你可以用两种方式:
1. 单个PID查询
如果你只想查某一个进程的用户名,直接用你提到的命令,把$pid替换成目标进程ID即可:
ps -u -p $pid
比如查PID 5973的话,就运行:
ps -u -p 5973
2. 批量查询所有GPU进程的用户名
如果想一次性获取所有GPU进程的用户名,不用逐个手动查询,可以用命令组合来自动提取并关联:
nvidia-smi | grep -E "PID|([0-9]+ +[A-Z] +)" | grep -v "NVIDIA-SMI" | awk '{print $2}' | tail -n +2 | while read pid; do user=$(ps -o user= -p $pid) echo "PID: $pid | 用户名: $user" done
这个命令的逻辑是:
- 先从
nvidia-smi的输出里过滤出包含PID的行 - 提取出所有进程的PID
- 循环每个PID,用
ps -o user= -p $pid获取对应的用户名并输出
内容的提问来源于stack exchange,提问作者Dang Manh Truong




