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

如何让nvidia-smi输出同时显示并管道至其他命令以避免重复调用

只调用一次nvidia-smi,同时输出到终端并处理管道

你当前的命令确实会两次调用nvidia-smi——一次用来提取PID,一次用来查询进程详情。要解决这个问题,我们可以通过两种常用方法实现单次调用+双重输出的需求:

方法1:用变量捕获输出(最直观易读)

先把nvidia-smi的输出一次性捕获到变量里,之后既可以打印输出到终端,又可以用这个变量来提取PID参数:

# 一次性获取nvidia-smi的完整输出
smi_result=$(nvidia-smi)

# 先把原始输出打印到终端(满足你查看完整GPU信息的需求)
echo "$smi_result"

# 再从捕获的输出中提取PID,传给nvidia-smi ps命令
nvidia-smi ps -up $(echo "$smi_result" | tail -n +16 | head -n -1 | sed 's/\s\s*/ /g' | cut -d' ' -f3)

这种方法的好处是逻辑清晰,后续如果要调整提取PID的规则,直接修改变量处理的部分即可,也方便调试。

方法2:用tee+xargs实现单行命令

如果想写成一行命令,可以用tee把输出同时发送到终端和后续的处理管道,再用xargs把提取到的PID传给nvidia-smi ps:

nvidia-smi | tee >(cat) | tail -n +16 | head -n -1 | sed 's/\s\s*/ /g' | cut -d' ' -f3 | xargs nvidia-smi ps -up

这里的tee >(cat)是关键:它会把nvidia-smi的输出一份传给后续的管道处理PID,另一份通过cat输出到你的终端。xargs则会把提取到的所有PID作为参数传递给nvidia-smi ps -up,完美替代原来的反引号语法。

小提示:尽量用$()替代反引号来做命令替换,$()支持嵌套,可读性也更强,是现代Shell的推荐写法。

内容的提问来源于stack exchange,提问作者Dang Manh Truong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:58:39