場合によっては、プログラムがバックグラウンドでロックされ、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になる最後の行( )を選択します。