CPU負荷が最も高いプロセスを自動的にシャットダウンするには?

CPU負荷が最も高いプロセスを自動的にシャットダウンするには?

場合によっては、プログラムがバックグラウンドでロックされ、CPU使用率が高くなることがあります。現在最高のCPU負荷を引き起こすプロセスをプログラムで確認して終了する方法はありますか?

ベストアンサー1

このタイプの作業に適していることを知っている場合は、より良いサービスを提供できる一連のUnixコマンドがあります。

  • 正規表現
  • 削除
  • それらすべてを殺す

特に、誤動作するプロセスの名前がわかっている場合は、これらのツールを使用して「攻撃」をさらにターゲットにすることができます。

それらすべてを殺す

Chromeを終了して最終的に解決する必要がある問題が引き続き発生します。私は通常それらをすべて殺すためにこのコマンドを使います。

$ killall chrome

pgrepとpkill

ただし、これを行うことも、最新のプロセスのみを処理することもできます。

# to list
$ pgrep -n chrome
23108

# to kill
$ pkill -n chrome

コマンドラインに基づいて殺す

-f実行可能ファイル名だけでなく、一致させたい長いパスパラメータを持つプロセスにアクセスするためにスイッチを追加することもできます。

たとえば、次のようなプロセスがあるとします。

$ ps -eaf | grep some
saml     26624 26575  0 22:51 pts/44   00:00:00 some weird command
saml     26673 26624  0 22:51 pts/44   00:00:00 some weird command's friend
saml     26911 26673  8 22:54 pts/44   00:00:00 some weird command's friend

彼らはただのBashシェルです。ARGV0次の名前に設定してください。ところで、私は次のプロセスにこのトリックを使用しました。

$ (exec -a "some weird command name's friend" bash)

友達を追う

しかし、これらの人がたくさんいて、コマンドラインに「友達」があるので、これらの中の特定のセットだけを追跡したいとしましょう。私はこれを行うことができます:

$ pgrep -f friend
26673
26911

最年少の友達を救う

いくつかあり、最新の項目を選択するには、-nスイッチをミックスに再度追加します。

$ pgrep -fn friend
26911

-fスイッチを登録するときに正規表現を使用することもできるので、次のように動作します。

$ pgrep -f "weird.*friend"
26673
26911

名前を見せて

スイッチを使用してプロセス名を再確認できます-l

$ pgrep -f "weird.*friend" -l
26673 some weird command's friend
26911 some weird command's friend

制御出力

または、pgrepカンマ(),で区切られたプロセスIDを一覧表示するように指示します。

$ pgrep -f "weird.*friend" -d,
26673,26911

次のような素晴らしい仕事をすることができます。

$ ps -fp $(pgrep -f weird -d,)
UID        PID  PPID  C STIME TTY          TIME CMD
saml     26624 26575  0 22:51 pts/44   00:00:00 some weird command
saml     26673 26624  0 22:51 pts/44   00:00:00 some weird command's friend
saml     26911 26673  0 22:54 pts/44   00:00:00 some weird command's friend

それでは、高いCPUプロセスを終了する方法は?

私は上記を使って高いCPUプロセスをより選択的に追求します。以下を使用して殺すことができます。

# newest guys
$ pkill -nf vlc ; pkill -nf opensnap

# kill all of these
$ killall vlc; killall opensnap

CPU負荷を見てください。

$ top -b -n 1 | grep -E $(pgrep -f "weird.*friend" -d\|) | grep -v grep
26911  0.1  112m 106m 6408  848 4900 1512    0    0 S  20   0  0.0 some weird command's friend                                     
26673  0.1  112m 106m 6392  848 5020 1504    0    0 S  20   0  0.0 some weird command's friend 

ここで,区切り文字をコンマ()に変更しました。このスイッチは-d,パイプ(|)とも呼ばれます。このスイッチを-d\|使用すると、grep次のようにプロセスIDが返されます。

$ pgrep -f "weird.*friend" -d\|
26673|26911

grep -E ...次に、特定のプロセスIDに基づいて出力をフィルタリングできるようにコマンドに挿入します。top

これは大きな進歩のように見えるかもしれませんが、私たちが使用しているプロセスIDは「weird.*friend」という特定のプロセスに関連付けられているプロセスIDにすぎないことが確実にわかります。

ここでは、CPUが最高のプロセスを見つけて本当に欲しい場合は終了できます。

高いCPU処理に対するより目標化されたアプローチ

$ top -b -n 1 | grep -E $(pgrep -f "weird.*friend" -d\|) | \
    grep -v grep | sort -nk14,14 | tail -1
26911  0.1  112m 106m 6408  848 4900 1512    0    0 S  20   0  0.0 some weird command's friend                                     

top上記の出力は、CPU列(列14)に基づいてソートされた出力です。最も低いものから高いものまでソートされるので、tail -1「weird.*friend」プロセスの中で最も高いCPUになる最後の行( )を選択します。

おすすめ記事