Herramienta de estilo ptree de Solaris para Linux


8

Estoy buscando la herramienta de Linux que imprimirá el mismo resultado que el ptree de Solaris. Por ejemplo:

# 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

Soy consciente de que pstree existe, pero no me gusta su formato de salida. ¿Alguien sabe alguna herramienta similar?

Respuestas:


7

Esto es todo lo que sé que es más como ptree en linux

ps -ejH

3
O ps axf. Lo encuentro más legible.
manatwork

o inclusops axf -o pid,command
jlliagre

5

Aquí hay un script que muestra resultados similares a los de Solaris pstree . No se admite ninguna opción y no se admite la coincidencia de usuarios. Este script debe ser portátil para todos los sistemas POSIX. En algunos sistemas cuyo pscomando no es compatible con POSIX, es posible que deba ajustar las opciones que se le pasaron ps. El script incluye soporte específico para sistemas BSD, por lo que la mayoría de las plataformas deberían estar cubiertas.

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

Probablemente esto no sea exactamente lo que está buscando, pero otros podrían apreciarlo.

htoptiene una vista de árbol si presiona F5.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.