Công cụ kiểu Solarree ptree cho Linux


8

Tôi đang tìm kiếm công cụ Linux sẽ in cùng một đầu ra như ptree Solaris. Ví dụ:

# 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

Tôi biết rằng pstree tồn tại, nhưng tôi không thích định dạng đầu ra của nó. Có ai biết bất kỳ công cụ tương tự?

Câu trả lời:


7

Đây là tất cả những gì tôi biết giống như ptree trong linux

ps -ejH

3
Hoặc ps axf. Tôi thấy nó dễ đọc hơn.
manatwork

hoặc thậm chíps axf -o pid,command
jlliagre

5

Đây là một kịch bản cho thấy đầu ra tương tự như Solaris pstree . Không có tùy chọn nào được hỗ trợ và kết hợp người dùng không được hỗ trợ. Kịch bản này phải có thể mang theo cho tất cả các hệ thống POSIX. Trên một số hệ thống có pslệnh không tuân thủ POSIX, bạn có thể cần điều chỉnh các tùy chọn được truyền cho ps. Kịch bản bao gồm hỗ trợ cụ thể cho các hệ thống BSD, vì vậy hầu hết các nền tảng nên được bảo hiểm.

#! /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

Đây có lẽ không phải là những gì bạn đang tìm kiếm chính xác, nhưng những người khác có thể đánh giá cao nó.

htopcó một cái nhìn cây nếu bạn nhấn F5.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.