Bash
將 cputime 的輸出格式化為 ps
我正在嘗試編寫一個腳本,該腳本可以在一段時間內監視程序的 CPU 使用率(以創建圖表)。
到目前為止,這是我正在使用的命令
ps -p $PROCID -o cputime,etimes
我唯一擔心的是 cputime 的輸出似乎是
[dd]hh:mm
(或類似的東西,現在不記得了)有沒有辦法以秒為單位格式化 cputime,有點像 etime -> etimes 以秒為單位獲得經過的時間?
編輯:這是我目前收到的輸出
2-03:01:33 2653793
我希望第一個參數以秒為單位,而不是天-小時:分鐘:秒。
這會將第一次轉換為秒:
ps -p $PROCID -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}'
例如, ps 命令產生:
$ ps -p 5403 -o cputime,etimes TIME ELAPSED 01:33:38 1128931
該
awk
命令處理並返回:ps -p 5403 -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}' 5618 1128931
解釋
-F'[: ]+'
這告訴 awk 將冒號和空格都視為欄位分隔符。這樣,小時、分鐘和秒將顯示為單獨的欄位。
/:/ {t=$3+60*($2+60*$1); print t,$NF}
初始
/:/
限制程式碼只能在包含冒號的行上工作。這將刪除標題行。秒數是通過小時、分鐘、秒計算的t=$3+60*($2+60*$1)
。然後將結果值t
與經過的時間一起列印。處理天數
如果
ps
產生天、小時、分鐘、秒,如:2-03:01:33
然後,改用此程式碼:
ps -p $PROCID -o cputime,etimes | awk -F'[-: ]+' '/:/ {t=$4+60*($3+60*($2+24*$1)); print t,$NF}'
如果幾天可能會或可能不會在輸出前添加,則使用此組合命令:
ps -p $PROCID -o cputime,etimes | awk -F'[-: ]+' '/:/ && NF==5 { t=$4+60*($3+60*($2+24*$1)); print t,$NF} /:/ && NF==4 {t=$3+60*($2+60*$1); print t,$NF}'