我试图通过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
答案 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秒(取决于每次迭代设置的延迟) >