さて、私はこれを約3時間試みましたが、成功しませんでした。
top
コマンド(または動作する場合はps
コマンド...)を検索/表示/使用して、CPU時間でソートされたすべてのprocのリストを出力する方法 'rootが所有するprocを除く'。
これまでの私の試み:
top -b -S -n 1 | grep -v root
top -b -S -n 1 | egrep -ve root
ps -eo pid,user,args,etime,time,%cpu --sort etime | egrep -v root
それと、バッチモードでトップを実行し、ファイルに出力し、ファイルをawk/grep/sort
して、CPU時間の量で適切にソートしようとするさまざまな試み(ほとんどの場合、適切な列を見つけることができない/適切な列をソートすることができません)一見便利な方法で)。
それが少し混乱しているように思われる場合は、私を許してください。 tl; dr:
ルートプロシージャなしでtopを簡単に読み取り、CPU時間でソートする方法が必要です。
ps
コマンドは、適切に並べ替えれば機能するはずです。 man ps
から:
--sort spec
Specify sorting order. Sorting syntax is
[+|-]key[,[+|-]key[,...]]. Choose a multi-letter key from the
STANDARD FORMAT SPECIFIERS section. The "+" is optional since
default direction is increasing numerical or lexicographic
order. Identical to k. For example: ps jax --sort=uid,-ppid,
+pid
いつ並べ替えたいかわかりませんが、関連する選択肢は次のとおりです。
STANDARD FORMAT SPECIFIERS
bsdtime TIME accumulated cpu time, user + system. The display
format is usually "MMM:SS", but can be shifted to
the right if the process used more than 999
minutes of cpu time.
cputime TIME cumulative CPU time, "[DD-]hh:mm:ss" format.
(alias time).
etime ELAPSED elapsed time since the process was started, in
the form [[DD-]hh:]mm:ss.
etimes ELAPSED elapsed time since the process was started, in
seconds.
I thinkあなたの質問からcputime
が欲しいと思います。もしそうなら、これはあなたにあなたの望ましい出力を与えるはずです:
ps -eo pid,user,args,etime,time,%cpu --sort cputime | grep -v root
ユーザーをtop
に表示しないようにするだけの場合は、-u
スイッチを使用できます。最初は明らかではありませんが、top
のマニュアルページを掘り下げると、このスイッチを無効にしてユーザーの除外リストとして機能させることもできます。
ただし、これを実行できる適切なバージョンのtop
があることを確認する必要があります。
$ top -version
procps-ng version 3.3.8
トップのマニュアルページからの抜粋
-u | -U :User-filter-mode as: -u | -U number or name
Display only processes with a user id or user name matching that
given. The '-u' option matches on effective user whereas the
'-U' option matches on any user (real, effective, saved, or
filesystem).
Prepending an exclamation point ('!') to the user id or name
instucts top to display only processes with users not matching the
one provided.
以下のコマンドでは、ユーザーroot
を除外しています。感嘆符(!
)をスラッシュ(\
)でエスケープすることが重要です。
$ top -u\!root
こんにちはこのコマンドはあなたのために働きます
# top -b -n 1 | grep -ve root
このコマンドからの出力はこちらをご覧ください