get_subprocesses.sh (1132B)
#!/bin/bash
function get_subprocesses() {
if [[ -z "$1" ]]; then
echo "Usage: $0 <PID>"
return 1
fi
function getpids() {
echo -n $1 " "
for sub in $(ps -o pid --no-headers --ppid "$1"); do
echo -n $sub $(getpids $sub) " "
done;
}
ps f $(getpids "$1")
}
# Explanation for those who wandered in here
# $(ps -o pid --no-headers --ppid $1) -> get all child process id's of the process id given by $1
# recursively call getpids() on each child until we run out of descendant process id's
# finally, call ps f on the whole thing, to print a process family
# This can be useful when a script might spawn many subprocesses, such as other scripts in parallel,
# sql connections, etc. it can be a way to check the status of a script i.e. how far down towards the
# script execution has reached
# It can also be useful to kill processes without leaving orphaned sub-processes, e.g. killing a script
# as well as any mysql connections it spawned -- in general, killing a bash script will not kill any
# spawned mysql processes