
詳解
一個程序可以包含一個進程或多個進程, 一個進程可以執行一個或多個程序
- 查看一個或多個進程運行信息
開頭演示的例子解釋,Agent程序由多個進程共同來進行,以\|(邏輯關系中是“或”的意思)區分開來,即qt-client\|sys-app\|clamd,
top -b n 1| grep 'qt-client\|sys-app\|clamd'
非交互模式下b,輸出一次n 1,一個或多個進程的運行信息,輸出結果如下:

- 使用awk進行數據處理
top -b n 1 | grep 'qt-client\|sys-app\|clamd'|awk '{print $6,$10,$12}'
保留關鍵信息:$6進程占用的物理內存,$10進程使用物理內存與總內存的百分比,$12進程啟動命令名稱

如果存在2個及以上進程時,做累加運算,執行如下命令行,分別指定了三個進程為qt-client、sys-app、clamd
top -b n 1| grep 'qt-client\|sys-app\|clamd'|awk '{a+=$6;b+=$10}END{print a,b}'

累加后,你會發現這里並沒有打印$12即啟動的進程名字,因為這里是做累加,也就是把多個行結果合並成一行結果,類似SQL里面的聚合運算,即使指定了$12也只會輸出其中一個進程名字,達不到我們想要的效果,所以這里不做打印輸出。
再打印一些輸出提示,為了更加好看,順便把內存大小轉換為單位M的形式
top -b n 1| grep 'qt-client\|sys-app\|clamd'|awk '{a+=$6;b+=$10}END{printf("xxx程序占用本地內存大小為: %2.fM\n",a/1024);printf("xxx程序占用本地內存百分比為:%.2f%%\n",b)}'

- 使用while循環語句實時輸出
while true;do sleep 1;top -b n 1| grep 'qt-client\|sys-app\|clamd'|awk '{a+=$6;b+=$10}END{printf("xxx程序占用本地內存大小為: %2.fM\n",a/1024);printf("xxx程序占用本地內存百分比為:%.2f%%\n",b)}';done

經整理后
count=1;while true;do echo "執行次數:$count";((count=$count+1));sleep 1;top -b n 1| grep 'qt-client\|sys-app\|clamd'|awk '{a+=$6;b+=$10}END{printf("Agent程序占用本地內存大小為: %2.fM\n",a/1024);printf("Agen程序占用本地內存百分比為:%.2f%%\n",b)}';done
每次執行從1計數,如果你想接着上一次結束的地方繼續計算,可以把count=1去掉
