it-swarm.com.de

Wie kann ich den Prozessbaum einer Terminal-Shell einschließlich untergeordneter Elemente anzeigen?

Wenn ein Skript über die Eingabeaufforderung gestartet wird, erzeugt die Shell einen Unterprozess für dieses Skript. Ich möchte diese Beziehung zwischen dem Prozess auf Terminalebene und seinen untergeordneten Elementen mithilfe von ps in einer Baumausgabe zeigen.
Wie kann ich das machen?

Was ich bisher versucht habe

datei: script.sh

#!/bin/bash

ps -f -p$1

Dann rufe ich das Skript über die Befehlszeile auf, die die Prozess-ID der Terminal-Shell übergibt:

$ ./script.sh $$

Was ich will, ist so etwas

  • shell-Prozess der obersten Ebene (Terminal)
  • ./script.sh
  • prozess für ps Befehl selbst
USER    PID  [..]
ubuntu 123     -bash
ubuntu 1234    \_ bash ./script.sh
ubuntu 12345      \_ ps auxf 

was ich bekomme ist:

  PID TTY      STAT   TIME COMMAND
14492 pts/24   Ss     0:00 -bash
36
the_velour_fog

Versuchen

# ps -aef --forest
root     114032   1170  0 Apr05 ?        00:00:00  \_ sshd: [email protected]/4
root     114039 114032  0 Apr05 pts/4    00:00:00  |   \_ -bash
root      56225 114039  0 13:47 pts/4    00:00:16  |       \_ top
root     114034   1170  0 Apr05 ?        00:00:00  \_ sshd: [email protected]
root     114036 114034  0 Apr05 ?        00:00:00  |   \_ /usr/libexec/openssh/sftp-server
root     103102   1170  0 Apr06 ?        00:00:03  \_ sshd: [email protected]/0
root     103155 103102  0 Apr06 pts/0    00:00:00  |   \_ -bash
root     106798 103155  0 Apr06 pts/0    00:00:00  |       \_ su - postgres
postgres 106799 106798  0 Apr06 pts/0    00:00:00  |           \_ -bash
postgres  60959 106799  0 14:39 pts/0    00:00:00  |               \_ ps -aef --forest
postgres  60960 106799  0 14:39 pts/0    00:00:00  |               \_ more
42
GILBERTO LINS

Ich fand es nach dem Lesen von diese Superuser-Antwort und bemerkte diesen Kommentar

Aber nicht für eine PID (-p), da nur der spezifische Prozess gedruckt wird, sondern für die Sitzung (-g)

und experimentieren

ps f -g<PID>

ergebnis

$ ./script.sh $$
  PID TTY      STAT   TIME COMMAND
14492 pts/24   Ss     0:00 -bash
 9906 pts/24   S+     0:00  \_ bash ./script.sh 14492
 9907 pts/24   R+     0:00      \_ ps f -g14492
26
the_velour_fog

Versuche dies:

 $ ps -afx
  PID TTY      STAT   TIME COMMAND
    2 ?        S      0:00 [kthreadd]
    4 ?        I<     0:00  \_ [kworker/0:0H]
    6 ?        I<     0:00  \_ [mm_percpu_wq]
    7 ?        S      0:14  \_ [ksoftirqd/0]
    8 ?        I      0:34  \_ [rcu_sched]
    9 ?        I      0:00  \_ [rcu_bh]
   10 ?        S      0:00  \_ [migration/0]
   11 ?        S      0:00  \_ [watchdog/0]
2
sluge

Sie können den Befehl ps f -g <PID> Verwenden und den Root-Prozess für PID angeben:

#> ps f -g 0

PID TTY      STAT   TIME COMMAND
2 ?        S      0:00 [kthreadd]
3 ?        S      0:01  \_ [ksoftirqd/0]
7 ?        S      0:19  \_ [rcu_sched]
2
Richard J.