私は一定期間プロセスのCPU使用率を監視するためのスクリプトを作成したいと思います(グラフ生成)。
これは私が今まで使っていたコマンドです
ps -p $PROCID -o cputime,etimes
私の唯一の関心事は、CPUTimeの出力が次のように見えることです。[dd]hh:mm
(またはこれに似たもの、今は覚えていません)
経過時間を秒単位で取得するために、etime -> etimesなどのCPUtimeを秒単位でフォーマットする方法はありますか?
編集:これは私が現在受け取る出力です。
2-03:01:33 2653793
最初のパラメータを日時:分:秒ではなく秒形式で指定したいと思います。
ベストアンサー1
これにより、最初の時間が秒に変換されます。
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}'