There are a few ways to view running processes in Linux, though you're most likely don't see relationship between processes but just just a plain listing.

You can list child processes grouped by their parent process from the terminal using ps and pstree command.

Show process tree in Linux:

  1. Launch a terminal application such as GNOME Terminal or konsole.
  2. List running processes owned by you using ps.
    $ ps -x
       PID TTY      STAT   TIME COMMAND
      1080 ?        Ss     0:00 /lib/systemd/systemd --user
      1081 ?        S      0:00 (sd-pam)
      1092 tty1     S+     0:00 -bash
      1175 ?        S      0:00 sshd: user@pts/0
      1176 pts/0    Ss     0:00 -bash
      1424 pts/0    R+     0:00 ps -x
  3. List these processes using ps in a tree format.
    $ ps -x --forest
       PID TTY      STAT   TIME COMMAND
      1175 ?        S      0:00 sshd: user@pts/0
      1176 pts/0    Ss     0:00  \_ -bash
      1436 pts/0    R+     0:00      \_ ps -x --forest
      1092 tty1     S+     0:00 -bash
      1080 ?        Ss     0:00 /lib/systemd/systemd --user
      1081 ?        S      0:00  \_ (sd-pam)

    More options could be added to the command such as ps -aux --forest to see details of more processes

  4. Install pstree if it's not already installed.
    $ sudo apt update && sudo apt install --assume-yes psmisc #Ubuntu and Debian
    $ sudo yum install --assumeyes pstree #CentOS and Red Hat
  5. List processes in a tree format using pstree.
    $ pstree
    systemd─┬─VGAuthService
            ├─accounts-daemon───2*[{accounts-daemon}]
            ├─atd
            ├─cron
            ├─dbus-daemon
            ├─login───bash
            ├─multipathd───6*[{multipathd}]
            ├─networkd-dispat
            ├─packagekitd───2*[{packagekitd}]
            ├─polkitd───2*[{polkitd}]
            ├─rsyslogd───3*[{rsyslogd}]
            ├─snapd───8*[{snapd}]
            ├─sshd───sshd───sshd───bash───pstree
            ├─systemd───(sd-pam)
            ├─systemd-journal
            ├─systemd-logind
            ├─systemd-network
            ├─systemd-resolve
            ├─systemd-timesyn───{systemd-timesyn}
            ├─systemd-udevd
            ├─unattended-upgr───{unattended-upgr}
            └─vmtoolsd───{vmtoolsd}

    More options for pstree:

    Usage: pstree [-acglpsStuZ] [ -h | -H PID ] [ -n | -N type ]
                  [ -A | -G | -U ] [ PID | USER ]
           pstree -V
    Display a tree of processes.
    
      -a, --arguments     show command line arguments
      -A, --ascii         use ASCII line drawing characters
      -c, --compact       don't compact identical subtrees
      -h, --highlight-all highlight current process and its ancestors
      -H PID,
      --highlight-pid=PID highlight this process and its ancestors
      -g, --show-pgids    show process group ids; implies -c
      -G, --vt100         use VT100 line drawing characters
      -l, --long          don't truncate long lines
      -n, --numeric-sort  sort output by PID
      -N type,
      --ns-sort=type      sort by namespace type (cgroup, ipc, mnt, net, pid,
                                                  user, uts)
      -p, --show-pids     show PIDs; implies -c
      -s, --show-parents  show parents of the selected process
      -S, --ns-changes    show namespace transitions
      -t, --thread-names  show full thread names
      -T, --hide-threads  hide threads, show only processes
      -u, --uid-changes   show uid transitions
      -U, --unicode       use UTF-8 (Unicode) line drawing characters
      -V, --version       display version information
      -Z, --security-context
                          show SELinux security contexts
      PID    start at this PID; default is 1 (init)
      USER   show only trees rooted at processes of this user
Discuss the article:

Share your thoughts, suggest corrections or just say Hi. Login not required.

Share!