So in partial answer to my question, Zombie processes have apparently ended but the parent process has not yet collected their exit status. I can get the parent process on the zombie process using something like 'ps -x -o pid,ppid,state,cmd' or 'pstree -p' I can also find the container they are in using /proc/<pid>/cgroup, and inspect the docker container with that id. $ ps -x -o pid,ppid,state,cmd | grep Z\
3072999 3072506 Z [Socket Process] <defunct>
3073019 3072506 Z [RDD Process] <defunct>
3073147 3072506 Z [Utility Process] <defunct>
...
$ ps 3072506
PID TTY STAT TIME COMMAND
3072506 ? Ssl 0:00 uv run main.py
$ cat /proc/3072999/cgroup
0::/docker/8bb21a3eccc9bd44ee1ddc60f33062c4043315e6e6789dafb2957bc855b2d8e2
$ docker inspect 8bb21a3eccc9bd|grep Name
"Name": "/byparr", So this shows that in my case, the hundreds of zombie processes came from the byparr container.