題:
在OSX上相當於Linux的“ ps f”(樹視圖)?
vartec
2011-04-11 18:49:25 UTC
view on stackexchange narkive permalink

如何獲得OSX下方的樹狀視圖?

  vartec @ some_server:〜$ ps xfPID TTY STAT TIME COMMAND11519嗎? S 0:00 sshd:vartec @ pts / 011520 pts / 0 Ss 0:00 \ _ -bash11528 pts / 0 R + 0:00 \ _ ps xf  

最感興趣的是樹結構,而不是擴展信息。

五 答案:
Ian C.
2011-04-12 01:55:49 UTC
view on stackexchange narkive permalink

您可以使用 Homebrew(我個人的最愛), MacPorts Fink安裝 pstree 命令,然後您將獲得Mac上進程的命令行樹視圖。

安裝Homebrew後,只需運行:

  brew install pstree   

然後在命令行中像 pstree 一樣使用它。

Greg Ercolano
2014-07-09 03:56:02 UTC
view on stackexchange narkive permalink

下面我稱為“ treeps”的小型perl腳本應該可以做到這一點;在linux(Sci Linux 6)+ OSX(10.6,10.9)上工作

示例輸出:

  $ ./treeps | _ 1 / sbin / launchd | _ 10 / usr / libexec / kextd | _ 11 / usr / sbin / DirectoryService | _ 12 / usr / sbin / notifyd | _ 118 / usr / sbin / coreaudiod | _ 123 / sbin / launchd [..] | _ 157 /庫/打印機/ hp / hpio / HP設備[..] | _ 172 /Applications/Utilities/Terminal.app [..] | _ 174登錄-pf acct | _ 175 -tcsh | _ 38571 su-erco | _ 38574 -tcsh  

這是代碼。

 #!/ usr / bin / perl#treeps-將ps(1)顯示為進程層次結構-v1.0 erco@seriss.com 07/08 / 14my%p; #pid infosub的全局數組PrintLineage($$){#打印過程沿襲my($ pid,$ indent)= @_; printf(“%s | _%-8d%s \ n”,$ indent,$ pid,$ p {$ pid} {cmd}); #打印foreach我的$ kpid(排序{$ a< = > $ b} @ {$ p {$ pid} {kids}}))##遍歷孩子PrintLineage($ kpid,“ $ indent”); #遞歸給孩子}}#MAINopen(FD,“ ps axo ppid,pid,command |”); while(<FD>){#讀取輸出行my($ ppid,$ pid,$ cmd)=($ _ =〜 m /(\ S +)\ s +(\ S +)\ s(。*)/); #解析ps(1)行$ p {$ pid} {cmd} = $ cmd; #$ p {$ pid} {kids} =(); <-不需要此行,並且可能導致不正確的輸出推送(@ {$ p {$ ppid} {kids}},$ pid); #將我們的pid添加到父母的孩子} PrintLineage(($ ARGV [0])?$ ARGV [0]:1,“”); #遞歸以從指定的PID或PID 1開始打印沿襲。 
在無法安裝Brew的情況下(調試Packer + vmware問題),我發現此答案很有用。
這是一個很好的答案,也是一個很好的起點,但是,如果有一種方法可以截斷行,這將更加有用,因為它們在OSX中的使用時間非常長,而且要包裹在終端窗口中。有什麼想法嗎?
@Rolf`treeps |cut -c 1- $ COLUMNS`將在當前終端窗口的寬度處剪掉長行。(或像`100`這樣的簡單數字,而不是$ COLUMNS`變量)
與阿莫斯·夏皮拉(Amos Shapira)的情況類似,我一直在尋找“釀造”本身-需要花費很長時間進行更新,並且沒有告訴終端運行的任何信息。所以,對我來說,這個答案是一顆寶石!
Meow
2016-05-16 00:25:22 UTC
view on stackexchange narkive permalink

我將Greg Ercolano的perl腳本改編為python腳本。

 #!/ usr / bin / env python2.7

將子流程導入為subp
導入os.path
導入系統
匯入
從集合導入defaultdict

def psaxo():
    cmd = ['ps','axo','ppid,pid,comm']
    proc = subp.Popen(cmd,stdout = subp.PIPE)
    proc.stdout.readline()
    對於proc.stdout中的行:
        產生line.rstrip()。split(None,2)

def hieraPrint(pidpool,pid,前綴=''):
    如果os.path.exists(pidpool [pid] ['cmd']):
        pname = os.path.basename(pidpool [pid] ['cmd'])
    其他:
        pname = pidpool [pid] ['cmd']
    ppid = pidpool [pid] ['ppid']
    pppid = pidpool [ppid] ['ppid']
    嘗試:
        如果pidpool [pppid] ['children'] [-1] == ppid:
            前綴= re.sub(r'^(\ s + \ |。+)[\ |`](\ s + \ |-)$','\ g<1> \ g<2>',前綴)
    除了IndexError:
        通過
    嘗試:
        如果pidpool [ppid] ['children'] [-1] == pid:
            前綴= re.sub(r'\ |-$','`-',前綴)
    除了IndexError:
        通過
    sys.stdout.write('{0} {1}({2}){3}'。format(prefix,pname,pid,os.linesep))
    如果len(pidpool [pid] ['children']):
        prefix = prefix.replace('-','')
        對於idx,sume in enumerate(pidpool [pid] ['children']):
            hieraPrint(pidpool,spid,prefix +'|-')

如果__name__ =='__main__':
    pidpool = defaultdict(lambda:{“ cmd”:“”,“ children”:[],'ppid':None})
    對於psaxo()中的ppid,pid,command:
        ppid = int(ppid)
        pid = int(pid)
        pidpool [pid] [“ cmd”] =命令
        pidpool [pid] ['ppid'] = ppid
        pidpool [ppid] ['children']。append(pid)

    hieraPrint(pidpool,1,'')
 

示例輸出:

  launchd(1)
 |-syslogd(38)
 |-UserEventAgent(39)
 |-kextd(41)
 |-fseventsd(42)
 |-導熱的(44)
 |-appleeventsd(46)
...
 |-iTerm(2879)
 | |-登錄(2883)
 | | `--bash(2884)
 | | `-Python(17781)
 | | `-ps(17782)
 | |-登錄(7091)
 | | `-bash(7092)
 | | `-ssh(7107)
 | `-登錄(7448)
 | `--bash(7449)
 | `-bash(9040)
|`-python(9041)
 |-已安裝(2909)
 |-DataDetectorsDynamicData(3867)
 |-netbiosd(3990)
 |-Firefox(5026)
...
 
wisbucky
2019-08-10 02:35:17 UTC
view on stackexchange narkive permalink

另一個選項是 htop ,它具有以樹格式顯示的選項。您可以交互地按下 F5 ,或者在啟動時使用 htop -t 。要安裝: brew install htop

enter image description here

來源: ServerFault

Jan Henning Thorsen
2020-03-03 11:18:17 UTC
view on stackexchange narkive permalink

我製作了一個不同的腳本,該腳本接受(應該接受?)您通常可以在OSX上給“ ps”的所有參數:

https://github.com/jhthorsen/snippets/blob/master/bin/ps

示例輸出:

  $ ps Af
   PID TTY STAT時間命令
     1 ?? Ss 198:44.08 / sbin / launchd
   141 ?? Ss 2:40.76 \ _ / usr / sbin / syslogd
   142 ?? Ss 6:54.11 \ _ / usr / libexec / UserEventAgent(系統)
   145 ?? SS 0:32.48 \ _ /System/Library/PrivateFrameworks/Uninstall.framework/Resources/uninstalld
   146 ?? Ss 1:12.84 \ _ / usr / libexec / kextd
   147 ?? Ss 18:51.47 \ _ /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.f
   148 ?? Ss 0:14.31 \ _ /System/Library/PrivateFrameworks/MediaRemote.framework/Support/mediaremoted
   151 ?? Ss 59:43.39 \ _ / usr / sbin / systemstats --daemon
   441 ?? S 0:05.39 \ _ / usr / sbin / systemstats --logger幫助程序/ private / var / db / systemstats
...

> ps Af -o ppid,pid,cpu,命令
  PPID PID CPU命令
     0 1 0 / sbin /啟動
     1141 0 \ _ / usr / sbin / syslogd
     1142 0 \ _ / usr / libexec / UserEventAgent(系統)
     1145 0 \ _ /System/Library/PrivateFrameworks/Uninstall.framework/Resources/uninstalld
     1146 0 \ _ / usr / libexec / kextd
     1147 0 \ _ /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versi
     1148 0 \ _ /系統/庫/PrivateFrameworks/MediaRemote.framework/支持/ mediaremoted
     1151 0 \ _ / usr / sbin / systemstats --daemon
   151441 0 \ _ / usr / sbin / systemstats --logger幫助程序/ private / var / db / systemstats
 


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...