shell脚本中的top命令

时间:2013-03-03 09:41:41

标签: linux shell expect

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

top | head -5给我低于输出,即没有cpu统计数据 -

  

top - 09:10:58 up 46 days,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

2 个答案:

答案 0 :(得分:6)

您需要在top而不是默认batch 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的值。

答案 1 :(得分: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

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