ptree() { local plist="$1" local pgen="$1" local pfound local pnew while : do pnew='' pfound=no for p in $pgen do pnew="$pnew `pgrep -P $p`" && pfound=yes done [ $pfound = no ] && break pgen="$pnew" plist="$plist $pnew" done echo $plist }