GNU“ps auxf”命令在 OS X / BSD 中的对应命令是什么?

GNU“ps auxf”命令在 OS X / BSD 中的对应命令是什么?

在 GNU 实用程序中,ps auxf使用森林(树)提供进程列表。BSD / OS X 系统上是否有此命令的等效项?

答案1

pstree 通常是默认安装的一部分,或者在 bsd 系统上很容易安装。这就是我使用的。例如,您可以通过以下方式安装它苹果端口在 Mac 上。

答案2

顶部也是一个非常好的进程查看器,并且它在下方状态栏 (F5) 中具有“树”视图作为其主要选项之一。

在此处输入图片描述

答案3

到目前为止,我不相信 OSX 有内置的可以实现此功能的功能。

但这是我发布的一个答案stackchange以及;一个小型 perl 脚本,用于确定进程层次结构并使用 OSX 内置 ps(1) 的输出以缩进形式打印它。

已在 OSX 10.6 和 10.9 上测试,并且也应可在 Linux 上运行(Sci Linux 6)。

#!/usr/bin/perl
# treeps -- show ps(1) as process hierarchy -- v1.0 [email protected] 07/08/14
my %p;                    # Global array of pid info
sub PrintLineage($$) {    # Print proc lineage
  my ($pid, $indent) = @_;
  printf("%s |_ %-8d %s\n", $indent, $pid, $p{$pid}{cmd});  # print
  foreach my $kpid (sort {$a<=>$b} @{ $p{$pid}{kids} } ) {  # loop thru kids
    PrintLineage($kpid, "   $indent");                       # Recurse into kids
  }
}
# MAIN
open(FD, "ps axo ppid,pid,command|");
while ( <FD> ) { # Read lines of output
  my ($ppid,$pid,$cmd) = ( $_ =~ m/(\S+)\s+(\S+)\s(.*)/ ); # parse ps(1) lines
  $p{$pid}{cmd} = $cmd;
  $p{$pid}{kids} = ();
  push(@{ $p{$ppid}{kids} }, $pid); # Add our pid to parent's kid
}
PrintLineage(1, "");     # recurse to print lineage starting with pid 1

答案4

如果你真的喜欢 GNU ps,你可以通过三大软件包系统之一将其安装到 OSX 上:

pkgsrc (NetBSD)——我最喜欢的,因为它可以在大多数流行的 Unix 上运行

MacPorts(OSX)

Fink(Debian,但不共享软件包集,当然也不共享构建)

相关内容