pgtree

June 29, 2026 · View on GitHub

Joknarf Tools Build and Release Packages Shell Licence Packages

pgtree

Unix process hierachy tree display for specific processes (kind of mixed pgrep + pstree) Same features as joknarf/pgtree but most portable, as no python needed

pre-requisites

  • bash
  • awk (any version)

Features

  • display process tree (parent + children) and optionnally threads
  • filter process/threads tree using pgrep options / pattern
  • limit tree to processes and their children
  • customize ps fields to output
  • can send kill or kill -9 to processes and their children
  • watch process tree
  • supports all unix/linux/macos

The purpose is to have the tool working out of the box on any Unix box.

Should work on any Unix that can execute :

# /usr/bin/pgrep 
# /usr/bin/ps ax -o pid,ppid,stime,user,ucomm,args

if pgrep command not available (AIX), pgtree uses built-in pgrep (-f -i -x -u <user> supported).

-T option to display threads only works if ps ax -T -o spid,ppid / pgrep -w available on system (ubuntu/redhat...)

pgtree Tested on various versions of RedHat / CentOS / Ubuntu / Debian / Suse / FreeBSD / ArchLinux / MacOS / Solaris / AIX including old versions

(uses -o fname on Solaris)

Examples

show all parents and children of processes matching bash

# pgtree bash

show processes matching bash and their children

# pgtree -c bash

kill all sh processes of user joknarf and their children

#pgtree -k -u joknarf -x sh

Customize ps output fields:

image

Put default options in PGTREE env variable:

# export PGTREE='-1 -O %cpu,stime -C y'
# pgtree

Use watch utility to follow process tree:

# pgtree -W bash

image

Demo

pgtree

Install

FYI, the pgtreeawk/pgtree is standalone and can be directly copied/used anywhere without any installation.

install using git:

# git clone https://github.com/joknarf/pgtreeawk

or use your prefered method according to your OS:

brew install joknarf/tools/pgtree
sudo dnf install https://github.com/joknarf/pgtreeawk/releases/latest/download/pgtree.rpm
curl -OL https://github.com/joknarf/pgtreeawk/releases/latest/download/pgtree.deb
sudo dpkg -i pgtree.deb
curl -OL https://github.com/joknarf/pgtreeawk/releases/latest/download/pgtree.apk
sudo apk add --allow-untrusted pgtree.apk
curl -OL https://github.com/joknarf/pgtreeawk/releases/latest/download/pgtree.pkg
sudo installer -pkg pgtree.pkg -target /

Usage

# pgtree -h
    usage: pgtree [-W] [-RIya] [-C <when>] [-O <psfield>] [-c|-k|-K] [-1|-p <pid1>,...|<pgrep args>]

    -I : use -o uid instead of -o user for ps command
         (if uid/user mapping is broken ps command can be stuck)
    -c : display processes and children only 
    -k : kill -TERM processes and children
    -K : kill -KILL processes and children
    -y : do not ask for confirmation to kill
    -R : force use of internal pgrep
    -C : color preference : y/yes/always or n/no/never (default auto)
    -w : tty wrap text : y/yes or n/no (default y)
    -W : watch and follow process tree every 2s
    -a : use ascii characters
    -T : display threads (ps -T)
    -O <psfield>[,psfield,...] : display multiple <psfield> instead of 'stime' in output
                   <psfield> must be valid with ps -o <psfield> command

    by default display full process hierarchy (parents + children of selected processes)

    -p <pids> : select processes pids to display hierarchy (default 0)
    -1 : display hierachy children of pid 1 (not including pid 0)
    <pgrep args> : use pgrep to select processes (see pgrep -h)

    found pids are prefixed with ▶