在 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,但不共享软件包集,当然也不共享构建)