Recently I ran into the problem of killing child processes. I want the output of a command in a variable, so something like this:
output="$(command...)"
The problem is two fold: the command itself spawns new children, and the command I'm running may not terminate. What I want to do is set a timer, then when the time is up I would kill the process. To kill it though, I would have to kill the youngest (inner most) child. I couldn't find a simple way to do this, so this is what I came up with:
output="$(command...)" & t=1 d=0 while (( "$t" < 120 && "$d" == 0 )); do sleep 1 if jobs | grep -v 'Done' | grep -v 'Exit 1' | grep 'parse' > /dev/null; then t="$(( $t + 1 ))" else d=1 fi done if (( "$d" == 0 )); then ps -AH | grep -A 10 "^ *$(jobs -l | awk '{print $2}')" | grep -B 10 ps | grep -v ps | awk '{print $1}' | while read pid; do kill -9 "$pid" done output='' else output="$(command..)" fi
My question is, is there a simpler way?
No comments
Post a Comment