W GNU utils ps auxf
podaje listę procesów z lasem (drzewem). Czy istnieje odpowiednik tego polecenia w systemach BSD / OS X?
W GNU utils ps auxf
podaje listę procesów z lasem (drzewem). Czy istnieje odpowiednik tego polecenia w systemach BSD / OS X?
Odpowiedzi:
pstree jest zazwyczaj częścią domyślnej instalacji lub można ją łatwo zainstalować w systemach bsd. Tego używam. Na przykład możesz zainstalować go za pośrednictwem Macports na Macu .
ps
nie ma tej umiejętności, ale sobie poradzę pstree
. Dzięki, że o tym wspomniałeś!
Jak dotąd nie wierzę, że OSX ma wbudowaną funkcję, która to robi.
Ale oto odpowiedź, którą zamieściłem również na stackexchange ; mały skrypt perla, który określa hierarchię procesów i drukuje ją w wciętej formie, używając danych wyjściowych wbudowanego ps (1) systemu OSX.
Testowany na OSX 10.6 i 10.9, i powinien również działać na systemie Linux (Sci Linux 6).
#!/usr/bin/perl
# treeps -- show ps(1) as process hierarchy -- v1.0 erco@seriss.com 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
To nie działa w OSX, ale dla FreeBSD jest to polecenie ps (1) z opcją -d. Wygląda tak:
% ps auxwwwd
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
root 0 0,0 0,0 0 304 - DLs 15:23 0:05,12 [kernel]
root 11 400,0 0,0 0 64 - RL 15:23 712:54,09 - [idle]
root 1 0,0 0,0 10004 140 - ILs 15:23 0:00,02 - /sbin/init --
root 309 0,0 0,0 11392 1372 - Is 15:23 0:00,08 |-- dhclient: em0 [priv] (dhclient)
_dhcp 355 0,0 0,0 11556 1444 - Is 15:23 0:00,06 |-- dhclient: em0 (dhclient)
root 404 0,0 0,0 14236 664 - Ss 15:23 0:01,57 |-- /sbin/devd
root 546 0,0 0,0 11360 1320 - Ss 15:23 0:00,63 |-- /usr/sbin/syslogd -s
root 678 0,0 0,0 17908 1252 - Is 15:24 0:00,00 |-- /usr/sbin/sshd
root 751 0,0 0,0 18312 1312 - Is 15:25 0:00,04 | `-- sshd: trasz [priv] (sshd)
trasz 753 0,0 0,0 18948 2012 - S 15:25 0:01,83 | `-- sshd: trasz@pts/0 (sshd)
trasz 754 0,0 0,0 13948 0 0 IWs - 0:00,00 | `-- -zsh (zsh)
trasz 765 0,0 0,0 15164 1456 0 I+ 15:25 0:00,01 | `-- tmux: client (/tmp/tmux-1001/default) (tmux)
root 681 0,0 0,0 15744 1740 - Ss 15:24 0:00,39 |-- sendmail: accepting connections (sendmail)
smmsp 684 0,0 0,0 15588 804 - Is 15:24 0:00,01 |-- sendmail: Queue runner@00:30:00 for /var/spool/clientmqueue (sendmail)
root 688 0,0 0,0 11384 640 - Is 15:24 0:00,10 |-- /usr/sbin/cron -s
root 733 0,0 0,0 12428 484 - Is 15:24 0:00,04 |-- /usr/sbin/autounmountd
root 738 0,0 0,0 10860 1112 - Is 15:24 0:00,00 |-- /usr/sbin/automountd
trasz 767 0,0 0,4 30036 17168 - Ss 15:25 0:01,97 |-- tmux: server (/tmp/tmux-1001/default) (tmux)
trasz 768 0,0 0,1 13888 2592 1 Is+ 15:25 0:00,05 | |-- -zsh (zsh)
trasz 11313 0,0 0,1 13952 3984 2 Is+ 21:05 0:00,07 | |-- -zsh (zsh)
trasz 11531 0,0 0,1 13952 3980 3 Is+ 21:55 0:00,05 | |-- -zsh (zsh)
trasz 37987 0,0 0,1 13920 4260 5 Ss 22:06 0:00,04 | |-- -zsh (zsh)
trasz 37998 0,0 0,1 11796 2512 5 R+ 22:07 0:00,00 | | `-- ps auxwwwd
trasz 25549 0,0 0,1 13952 3980 4 Is+ 21:57 0:00,08 | `-- -zsh (zsh)
root 743 0,0 0,0 10900 1100 v0 Is+ 15:24 0:00,00 |-- /usr/libexec/getty Pc ttyv0
root 744 0,0 0,0 10900 1100 v1 Is+ 15:24 0:00,01 |-- /usr/libexec/getty Pc ttyv1
root 745 0,0 0,0 10900 1100 v2 Is+ 15:24 0:00,00 |-- /usr/libexec/getty Pc ttyv2
root 746 0,0 0,0 10900 1100 v3 Is+ 15:24 0:00,01 |-- /usr/libexec/getty Pc ttyv3
root 747 0,0 0,0 10900 1100 v4 Is+ 15:24 0:00,00 |-- /usr/libexec/getty Pc ttyv4
root 748 0,0 0,0 10900 1100 v5 Is+ 15:24 0:00,00 |-- /usr/libexec/getty Pc ttyv5
root 749 0,0 0,0 10900 1100 v6 Is+ 15:24 0:00,00 |-- /usr/libexec/getty Pc ttyv6
root 750 0,0 0,0 10900 1100 v7 Is+ 15:24 0:00,01 `-- /usr/libexec/getty Pc ttyv7
root 2 0,0 0,0 0 16 - DL 15:23 0:00,00 - [crypto]
root 3 0,0 0,0 0 16 - DL 15:23 0:00,00 - [crypto returns]
root 4 0,0 0,0 0 32 - DL 15:23 2:16,26 - [cam]
root 5 0,0 0,0 0 16 - DL 15:23 0:00,00 - [mpt_recovery0]
root 6 0,0 0,0 0 16 - DL 15:23 0:00,01 - [soaiod1]
root 7 0,0 0,0 0 16 - DL 15:23 0:00,01 - [soaiod2]
root 8 0,0 0,0 0 16 - DL 15:23 0:00,01 - [soaiod3]
root 9 0,0 0,0 0 16 - DL 15:23 0:00,01 - [soaiod4]
root 10 0,0 0,0 0 16 - DL 15:23 0:00,00 - [audit]
root 12 0,0 0,0 0 800 - WL 15:23 2:21,06 - [intr]
root 13 0,0 0,0 0 48 - DL 15:23 0:00,03 - [geom]
root 14 0,0 0,0 0 240 - DL 15:23 0:10,36 - [usb]
root 15 0,0 0,0 0 16 - DL 15:23 0:00,00 - [sctp_iterator]
root 16 0,0 0,0 0 16 - DL 15:23 0:23,43 - [rand_harvestq]
root 17 0,0 0,0 0 48 - DL 15:23 0:35,10 - [pagedaemon]
root 18 0,0 0,0 0 16 - DL 15:23 0:05,36 - [vmdaemon]
root 19 0,0 0,0 0 32 - DL 15:23 1:10,04 - [bufdaemon]
root 20 0,0 0,0 0 16 - DL 15:23 0:06,68 - [bufspacedaemon]
root 21 0,0 0,0 0 16 - DL 15:23 0:35,66 - [syncer]
root 22 0,0 0,0 0 16 - DL 15:23 0:00,86 - [vnlru]
root 23 0,0 0,0 0 16 - DL 15:23 0:04,96 - [racctd]
Jeśli naprawdę kochasz GNU ps, możesz zainstalować go na OSX za pomocą jednego z 3 dużych systemów pakietów:
pkgsrc (NetBSD) - mój ulubiony, ponieważ działa na najpopularniejszych Uniksach
MacPorts (OSX)
Fink (Debian, ale nie współużytkuje zestawu pakietów i oczywiście nie udostępnia kompilacji)
Oto link do odpowiedzi, którą zamieściłem na stackexchange: /apple//a/383505/364338
Link do mojej wersji (otoki) „ps”: https://github.com/jhthorsen/snippets/blob/master/bin/ps
--- Aktualizacja ---
Zrobiłem inny skrypt, który bierze (powinien wziąć?) Wszystkie argumenty, które normalnie możesz podać „ps” w OSX:
https://github.com/jhthorsen/snippets/blob/master/bin/ps
Przykładowe dane wyjściowe:
$ ps Af
PID TTY STAT TIME COMMAND
1 ?? Ss 198:44.08 /sbin/launchd
141 ?? Ss 2:40.76 \_ /usr/sbin/syslogd
142 ?? Ss 6:54.11 \_ /usr/libexec/UserEventAgent (System)
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-helper /private/var/db/systemstats
...
> ps Af -o ppid,pid,cpu,command
PPID PID CPU COMMAND
0 1 0 /sbin/launchd
1 141 0 \_ /usr/sbin/syslogd
1 142 0 \_ /usr/libexec/UserEventAgent (System)
1 145 0 \_ /System/Library/PrivateFrameworks/Uninstall.framework/Resources/uninstalld
1 146 0 \_ /usr/libexec/kextd
1 147 0 \_ /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versi
1 148 0 \_ /System/Library/PrivateFrameworks/MediaRemote.framework/Support/mediaremoted
1 151 0 \_ /usr/sbin/systemstats --daemon
151 441 0 \_ /usr/sbin/systemstats --logger-helper /private/var/db/systemstats