0
0

More than 1 year has passed since last update.

特定のプロセスについてtopコマンドで一定時間毎にデータを入手

Last updated at Posted at 2022-12-12

CPU/メモリの利用状態を全体、および各プロセスごとに確認する際に topコマンド を用いることがあると思います。今回は特定のプロセスについてtopコマンドで一定時間ごとにデータを入手したものをファイルに保存したいと思います。さらに、そのデータから特定の値のみ(CPU使用率だけなど)抽出するにはどうすればよいか紹介したいと思います。

topコマンドによって監視するプロセスはなんでもいいのですが今回はyesコマンドとします。

まず以下のようにyesコマンドをバックグラウンドで実行します。

yesコマンドをバックグラウンドで実行
yes > /dev/null &

出力を /dev/null にリダイレクトしています。/dev/nullに送られたデータは全て破棄されます。
&をつけることによりコマンドをバックグラウンドで実行できます。

ではtopコマンドの結果からyesコマンドによるプロセスの行のみを抽出したいと思います。

topコマンドはデフォルトで3秒ごとにデータを更新します。今回は-n 3 オプションにより3回分抽出してtop.txtというファイルに保存してみましょう。

topコマンドの結果からyesコマンドの行のみ抽出してファイルに保存
top -b -n 3 | grep --line-buffered yes > top.txt

topコマンドの結果から、名前にyesという文字列の入るプロセスの行を抽出してファイルに保存しています。

ここでbオプション付けないと上手く動作してくれません。先頭にtopの結果以外の文字が混入してしまいます。
この理由は正直分かりませんでした...。キー操作による入力が勝手にまじっちゃうのかな? (有識者の方教えていただけると嬉しいです)

ポイントとしてはgrepのオプションとして --line-buffered を用いることです。
stackoverflowの解答を参考にしました。
デフォルトではgrepはバッファのサイズを超えるまで出力をバッファリングします。そのためこのオプションを付けないとtop.txtに何も書き込まれせん。これは実行環境によって異なるかもしれません。--line-bufferedオプションにより1行単位で出力させることができます。

それでは作成されたtop.txtを見てみましょう。

top.txt
  14163 ユーザー名    20   0    9120    580    516 R 100.0   0.0 106:11.53 yes
  14163 ユーザー名    20   0    9120    580    516 R 100.0   0.0 106:14.53 yes
  14163 ユーザー名    20   0    9120    580    516 R 100.0   0.0 106:17.54 yes

yesプロセスに対するtopコマンドの結果が3回分表示されていますね!

ユーザー名の箇所はyesコマンド実行ユーザが表示されていると思います。他にyesという文字列の入るプロセスが起動していれば、上記以外の行も出力されてしまいます。

それではこのファイルからCPU使用率のみ抽出したいと思います。CPU使用列は右から4項目目の値です。

ファイルから特定の列を抽出したい時にはcutコマンドを用いると良いです。
抽出した結果をcpu.txtに保存したいと思います。

cutコマンドでCPU使用率を抽出
cut -c 50-54  top.txt > cpu.txt

cut-c 50-54オプションにより、top.txtの各行に対し50文字目から54文字目を抜き出します。CPU使用率の箇所が何文字目かは、エディタでファイルを開いた際にどこかにカーソルの位置が何文字目か表示されていると思いますので、そこから調べていただけると幸いです。

cpu.txtの内容を確認すると

cpu.txt
100.0
100.0
100.0

CPU使用率のみを抽出できていました!

目標達成です! この記事の需要があるかどうかわかりませんが、どなたかの役に立っていれば私も嬉しいです。
ここまで読んでいいただきありがとうございました!!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0