3

我试图通过期望脚本获得前 5 行 top 命令。我从 shell 脚本和其他一些东西一起调用这个期望脚本。

top | head -5给我下面的输出,即没有cpu stats-

顶部 - 09:10:58 46 天,17:03,12 个用户,平均负载:0.01, 0.02, 0.00 任务:总共 138 个,1 个正在运行,137 个正在睡眠,0 个停止,0 个僵尸

内存:总计 16432400k,已使用 8408096k,可用 8024304k,609200k 缓冲区交换:总计 6290736k,已使用 0k,可用 6290736k,缓存 6754356k

如果我只top在该远程服务器上运行命令,我可以看到在更新 CPU 状态行之前有 2-3 秒的延迟,有人可以帮我获取所有 5 行更新的 CPU 状态吗?以下是我的期望脚本 -

#!/usr/bin/expect -f
set user1 abc
set pass1 pass
set timeout 8
match_max 1000
spawn ssh -C -o stricthostkeychecking=no $user1@<ip>
expect "*?assword:*"
send  "$pass3\r"
expect "?xterm*"
send "\r"
send "top | head -5\r"
expect eof
4

2 回答 2

8

您需要运行topbatch mode不是默认的interactive mode. 此外,您需要定义top为获取其测量值而执行的迭代次数。

num_iterations=3
top -b -n $num_iterations | head -5

如果您希望输出仅列出前 5 个进程并跳过显示的统计标题,您可以尝试以下操作:

num_iterations=3
top -b -n $num_iterations | sed -n '8,12p'

还可以根据需要调整值num_iterations

于 2013-03-03T09:59:54.223 回答
0
top -b -n 2 -u $(whoami) | grep -A6 -B5 PID |tail -12

根据要求调整以下值。

grep
-A$after_lines_count
-B$before_lines_count

尾巴- $($after+$before + 1)

尾值应为 [ 行数前 + 行数后 + 1(PID 匹配行)]

如果您不想要用户特定的详细信息。

  top -b -n 2 | grep -A6 -B5 PID |tail -12

注意:顶部迭代次数为 2(top -n 2),即显示输出需要 6 秒(取决于每次迭代设置的延迟)

于 2020-05-30T21:37:19.900 回答