殺したい。
誤解がないように書くと、fluentdとかapacheとか親プロセスがワーカー(子)を生むようなものがハングしたときに、親と子をまとめてkill -KILLしたい事がある。pkill -KILLで名前があってれば無差別にkillという方法もあるが、無差別殺人事件になる可能性があるので、特定の親子プロセスだけをkillしたい。なお、親のPIDはわかってるものとして、$PIDとおく。
UNIXでは、親を殺してしまうと子はinitの養子に引き取られてしまう。そのため、親を殺す前に子を全て列挙する必要がある。psコマンドで--ppid=
を付けることで調べることが出来る。
CHILDS=`ps --ppid=$PID | cut -d' ' -f1`
後は親と子供をまとめてkillすればよい。まとめて書くと次のような感じになる。
killall.sh
#!/bin/sh
PID=$1
CHILDS=`ps --ppid=$PID | cut -d' ' -f1`
kill -KILL $PID $CHILDS
なんかもうすこし簡単にできそうな気もする。