プロセスの簡単な説明でスクリプトを解決しようとしています。 Linuxを初めて使うので、何か間違っている可能性があります。
Firefoxのメモリ使用量を計算するmemory.shスクリプトを作成します(合計メモリに対するパーセンテージ)。
1. プロセスとメモリ使用量のリスト(パーセントで表示)
ps -e -o pmem,args |
2.このリストで、firefoxという単語を含む行を検索します。
ps -e -o pmem,args | grep -i firefox
3. メモリ使用量を示す列のみを使用してください
ps -e -o pmem,args | grep -i firefox | grep -v grep
4. + を追加してリスト内の各項目を表示します。
5. リストの末尾にゼロを追加します。
6. 新しい行を開始して終了を追加します。
7. 計算する
答え1
GNU/Linux では、以下を使用してくださいzsh
。
printf 'Total: %.3g%%\n' ${(j[+])${(f)"$(
pgrep -f firefox | LC_ALL=C xargs -r ps -o pmem=
)"}}
どこ:
pgrep -f firefox
引数リストに含まれるプロセスのpidを報告します。firefox
xargs -r
その項目(存在する場合)を引数として渡します。ps
ps -o pmem=
メモリ使用量の割合を出力します(将来の校正のために小数点の.
デフォルト文字を含む英語形式LC_ALL=C
)。"$(...)"
ps
引用のためにIFS分割が無効になっている間に出力をキャプチャします。${(f)...}
代わりに改行文字に分割してください。${(j[+])...}
結果の単語を次に関連付けます。+
$(( ... ))
結果は算術式として解釈されます。printf 'Total: %.3g%%\n'
デフォルトの3桁の精度で印刷されます。
pmem
今後は1桁の数字でのみ表示されます.
。したがって、これはメモリをほとんど使用しないプロセスの場合、精度が非常に低くなります。たとえば、4GiBシステムで100KiBまたは2MiBを使用するプロセスは0.0%のメモリを使用するとみなされ、2MiBを使用する200個のプロセスは400MiBを使用するため10%になりますが、上で計算した合計は0になります。 。
より良い精度を得るには、rss
すべてのプロセスの累積を計算し、次のことを行う必要がありますhand
。
pattern=firefox
used=$((
${(j[+])${(f)"$(
pgrep -f -- "$pattern" | LC_ALL=C xargs -r ps -o rss=
)"}}
))
grep '^MemTotal:' /proc/meminfo | read x total x
printf 'Total: %.3g%%\n' 'used * 100. / total'
答え2
一度試してみてください。フォーマットガイドラインにある程度従ってください(出力フォーマットの例がなければ難しいです)。推測する正確に何を期待しましたか?):
$ \ps -eo pmem,args | awk '/[Ff]irefox/ {totmem+=$1;printf "%s+", $1}
END{printf "%s%2.1f%s\n", "0=",totmem,"%"}'
4.0+0.3+0.8+1.1+1.2+1.0+1.0+0.5+0.5+0.5+0=10.9% # example output w/o the one liner's own memory consumption
ただし、合計を直接生成することもできます。
$ \ps -eo pmem,args | awk '/[Ff]irefox/ {totmem+=$1}
END{print "total memory used:",totmem,"%"}'
total memory used: 10.9 % # example output
(GNU Awk 5.1.1を使用してテスト済み)