web-dev-qa-db-ja.com

'root'プロシージャなしでtopを介してプロセスのCPU時間を表示する方法

さて、私はこれを約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時間でソートする方法が必要です。

3
nom

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
2
terdon

ユーザーを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

ss of top

7
slm

こんにちはこのコマンドはあなたのために働きます

# top -b -n 1 | grep -ve root

このコマンドからの出力はこちらをご覧ください

Top Output

0
Babin Lonston