Linux用のSolaris ptreeスタイルツール


8

Solaris ptreeと同じ出力を出力するLinuxツールを探しています。例えば:

# ptree 538
538   /usr/lib/ssh/sshd
  889   /usr/lib/ssh/sshd
    890   /usr/lib/ssh/sshd
      1498  -sh
        1649  bash
          1656  -sh
            1660  bash
              13716 ptree 538

pstreeが存在することは承知していますが、その出力形式は好きではありません。誰かが似たようなツールを知っていますか?

回答:


7

これは、Linuxのptreeに最もよく似ていることです。

ps -ejH

3
またはps axf。私はそれがより読みやすいと思います。
manatwork

またはps axf -o pid,command
jlliagre 2011

5

Solaris pstreeに類似した出力を表示するスクリプトは次のとおりです。オプションはサポートされておらず、ユーザーマッチングはサポートされていません。このスクリプトは、すべてのPOSIXシステムに移植可能でなければなりません。psコマンドがPOSIXに準拠していない一部のシステムでは、に渡されるオプションを調整する必要がある場合がありますps。スクリプトにはBSDシステムの特定のサポートが含まれているため、ほとんどのプラットフォームをカバーする必要があります。

#! /bin/sh
## Usage: $0 [PID...]
## Show the processes on the system. For each process, show the process
## id followed by the command line. Show child processes after their parent,
## indented.
## If one or more PIDs are specified, only show the ancestors and
## descendants of those PIDs. If no PID is specified, show the subtree
## rooted at PID 1.
## This utility mimics Solaris pstree(1).
case $(uname) in *BSD*) ps_A='-ax';; *) ps_A='-A';; esac
ps $ps_A -o pid= -o ppid= -o args= |
sort -k 1n |
awk -v targets="$*" '
# children[p]: the " "-separated list of the pids of the children of p
# cmd[p]: command line of p
# list[lb..le]: list of pids yet to traverse
# depth[p]: depth of process p: depth(child) = depth(parent) + 1
# parent[p]: pid of the parent of p
# show[p]: 1 to show p, 2 to show p and all its descendants
BEGIN {
    list[0] = 0; lb = 0; le = 0;
    depth[0] = -1;
}
{
    pid=$1; ppid=$2;
    sub(/^ *[0-9]+ +[0-9]+ /, "");
    if (pid == ppid) {
        # This process is a root: add it to the list of processes to taverse
        list[++le] = pid;
    } else {
        children[ppid] = children[ppid] " " pid;
        parent[pid] = ppid;
    }
    cmd[pid] = $0;
}
END {
    # Parse targets into a list of pids (or 1 if none is specified).
    split("_" targets, a, /[^0-9]+/);
    delete a[1];
    if (a[2] == "") a[2] = 1;
    for (i in a) {
        show[a[i]] = 2; # Show targets recursively
        p = parent[a[i]];
        # Show target ancestors
        while (p && !show[p]) {
            show[p] = 1; 
            p = parent[p];
        }
    }

    # Traverse the list of processes
    while (lb <= le) {
        pid = list[lb++];
        # Add children to the list of processes to traverse
        split(children[pid], a);
        for (i in a) {
            list[--lb] = a[i];
            depth[a[i]] = depth[pid] + 1;
            if (show[pid] > 1) show[a[i]] = show[pid];
        }
        # Show the current process if desired, indenting to the right depth
        if (show[pid]) {
            for (i = 1; i <= depth[pid]; i++) printf("  ");
            printf("%-5d ", pid);
            print cmd[pid];
        }
    }
}
'

2

これはおそらくあなたが探しているものではありませんが、他の人はそれを高く評価するかもしれません。

htopを押すとツリービューが表示されますF5


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.