watch 命令是一个用于监视命令或脚本输出的实用工具。它会周期性地运行指定的命令,并将命令的输出结果实时显示在终端上。通过 watch 命令,您可以方便地监视命令的执行情况或动态查看某个命令的输出变化。
watch 命令的语法如下:
watch [选项] 命令
其中,选项可以是以下常用参数之一:
-n
或--interval
:指定刷新间隔的时间,单位为秒,默认值为2秒。-d
或--differences
:突出显示输出结果中变化的部分。-t
或--no-title
:在输出结果的顶部不显示标题信息。
下面是 watch 命令的一些示例用法:
- 监视当前系统时间的变化:
watch date
- 每隔5秒监视当前系统的负载情况:
watch -n 5 uptime
- 实时查看系统磁盘使用情况:
watch df -h
- 监视某个日志文件的变化:
watch tail -n 10 logfile.txt
如果对watch命令还有疑问,可以使用man watch来进行查询,如下所示:
watch命令真的是很好用,尤其是在一些系统性能监控的场景下,对于我自己来说,我使用watch命令最最频繁的就是监控服务器GPU利用信息了,
nvidia-smi 命令是 NVIDIA System Management Interface(NVIDIA 系统管理接口)的缩写,它是一个用于监视和管理 NVIDIA GPU(图形处理器)的命令行工具。通过 nvidia-smi 命令,您可以获取与 NVIDIA GPU 相关的系统信息、显存使用情况、进程信息等。
说到查询监控GPU信息,那么自然离不开nvidia-smi命令。使用 nvidia-smi 命令时,一般的语法如下:
nvidia-smi [选项]
以下是一些常用的选项和用法示例:
- 显示当前系统中所有 GPU 的状态和相关信息:
nvidia-smi
- 定期刷新显示 GPU 状态,每隔2秒更新一次:
nvidia-smi -l 2
- 以逐行方式显示 GPU 进程信息:
nvidia-smi pmon
- 查看指定 GPU 的详细信息:
nvidia-smi -i <GPU 索引>
其中,<GPU 索引>
是 GPU 的索引号,从 0 开始递增。
- 输出 GPU 的显存使用情况以及进程占用情况到文件中:
nvidia-smi --query-gpu=memory.used,pid,process_name --format=csv > gpu_info.txt
这些示例展示了 nvidia-smi 命令的一些常见用法,如果需要更多关于 nvidia-smi 命令的信息,可以通过运行 nvidia-smi --help
查看命令的帮助文档。
我自己经常使用的命令如下所示:
watch -n1 -d nvidia-smi
这个命令的意思就是:每间隔1s自动查询依次GPU情况,并显示出来差异部分,显示效果如下所示:
linux下用起来很方便,但是有一个烦恼就是windows下能否也这么方便地使用呢?
我们来看下:
显然watch不是windows下面可以识别的命令。
但是直接在cmd终端里面执行nvidia-smi却是可以查询到GPU信息,如下所示:
但是如果想要能够像在linux系统下面实现自动间隔时长查询的话就不行的,着实是很不方便的,这里就想着是否可以也通过脚本或者是终端命令的形式来实现这个功能,查阅了一些资料,发现的确是可以自己实现自动间隔指定时间来执行指定命令的,这里不再赘述了,直接给出来详细的实现,如下所示:
@ECHO OFF
SET ExecuteCommand=nvidia-smi
SET ExecutePeriod=5
SETLOCAL EnableDelayedExpansion
:loop
cls
echo !date! !time!
echo After !ExecutePeriod! s will execute the cmd^: !ExecuteCommand!
echo.
%ExecuteCommand%
timeout /t %ExecutePeriod%
goto loop
执行结果如下所示:
底部动态倒计时,我这里设置的是间隔5秒后自动执行nvidia-smi也就是GPU信息查询命令。
如果不想在底部显示倒计时信息,想要呈现效果个linux系统下的效果高度相似的话,也是可以的。
可以使用下面的脚本,如下所示:
@ECHO OFF
SET ExecuteCommand=nvidia-smi
SET ExecutePeriod=5
SETLOCAL EnableDelayedExpansion
:loop
cls
echo !date! !time!
echo After !ExecutePeriod! s will execute the cmd^: !ExecuteCommand!
echo.
%ExecuteCommand%
timeout /t %ExecutePeriod% > nul
goto loop
"timeout /t %ExecutePeriod% > nul" 是一个用于Windows系统的命令,它会在指定的时间段内等待,然后再继续执行后续的命令。通过这个命令,可以在批处理脚本或命令提示符中创建延迟或实现基于时间的操作。
具体而言,命令中的 "%ExecutePeriod%" 是一个变量,用于指定等待的时间,单位是秒。命令会在执行到这一行时暂停指定时间,然后继续执行后面的命令。"> nul" 部分用于将命令的输出重定向到空设备,这样就不会在屏幕上显示等待时间的信息。
这个命令通常用于需要在脚本中引入延迟或按照一定时间间隔执行命令的情况。
终端显示结果如下所示:
感兴趣的话都可以自己试试哈,记录备忘!