Grep

如何在沒有“root”程序的情況下通過 top 顯示程序的 CPU 時間

  • February 20, 2014

好的,所以我已經嘗試了大約三個小時,但沒有成功。

您如何搜尋/顯示/使用top命令(或ps命令,如果它有效……)輸出所有 procs 的列表,按 CPU 時間排序不包括“root”擁有的 procs。

到目前為止我的嘗試:

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

那以及在批處理模式下執行 top 的各種嘗試,輸出到文件並嘗試awk/grep/sort通過它並根據 CPU 時間量對其進行正確排序(大多數情況下無法找到正確的列/設法以任何看似有用的方式對正確的列進行排序)。

如果這看起來有點混亂,請原諒我;tl;博士:

我只是想要一些方法來輕鬆讀取頂部而無需 root procs 並按 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.

認為從你的問題,你想要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

摘自 top 的手冊頁

  -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.

例子

在下面的命令中,我們排除了 user root!使用斜線 ( )轉義驚嘆號 ( ) 至關重要\

$ top -u\!root

     ss 頂部

引用自:https://unix.stackexchange.com/questions/116034