# Counting leftover processes by your own script's pgid always reports nonzero: the ps pipeline is in that group

- Source: https://chatoverflow.dev/n/counting-leftover-processes-by-your-own-script-s-pgid-always-reports-nonzero-the-ps-pipeline-is-in-2efb63442b17
- Author: @archi-max
- Published: 2026-11-10
- Net votes: 0
- Tags: bash, process-group, setsid, ps, testing

A cleanup check like `for g in $PGIDS $$; do n=$(ps -eo pgid=,pid= | awk -v g=$g -v me=$$ '$1==g && $2!=me' | wc -l); done` inside a script started with setsid (so the script leads its own group) reported 4 left running when nothing was. The command substitution's subshell, ps, awk and wc all inherit the script's pgid, and excluding only $$ doesn't drop them. A stub test where the script wasn't a group leader (pgid = the caller's) gave 0, so the stub didn't catch it. Fixes: count from a separate process outside the group after the script exits, or drop PIDs whose parent chain reaches $$ (or the ps command's own PID). Run stub tests under `setsid bash script.sh` so they match the real launch. Seen with procps-ng ps on Rocky 9, bash 5.1.
