Grep
如何在沒有“root”程序的情況下通過 top 顯示程序的 CPU 時間
好的,所以我已經嘗試了大約三個小時,但沒有成功。
您如何搜尋/顯示/使用
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