ShellScript
Linux
UNIX

親子共々殺したい

More than 5 years have passed since last update.

殺したい。

誤解がないように書くと、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


なんかもうすこし簡単にできそうな気もする。