Rubyでプロセスを殺すことができる
Process.kill("KILL", 123)
で出来るのだけど。プロセスグループをそのままKILLしてみたかった。
Process.kill(signal, pid ... )Process.kill(signal, pid ... )
pid で指定されたプロセスにシグナルを送ります。signal はシグナル番号か名前(文字列またはSymbol)で指定します。
負の値を持つシグナル(あるいはシグナル名の前に-)もしくは 負の値を持つプロセス番号を与えるとプロセスではなくプロセスグループにシグナルを送ります。 負の値のプロセス番号はプロセスグループ番号を符号反転したものと見なされます。
全てのシグナル送信に成功した場合、指定した pid の数を返します。 失敗した場合は例外 Errno::EXXX が発生します。
存在しないシグナルを指定した場合は、例外 ArgumentError が発 生します*2
trapも参照してください。
シグナル番号ってどれ?
負の値を持つシグナル(あるいはシグナル名の前に-)もしくは 負の値を持つプロセス番号を与えるとプロセスではなくプロセスグループにシグナルを送ります。
シグナル番号について
Signal.list >> pp Signal.list #=> nil {"ILL"=>4, "STOP"=>19, "SEGV"=>11, "URG"=>23, "ALRM"=>14, "PIPE"=>13, "QUIT"=>3, "PWR"=>30, "IO"=>29, "TTOU"=>22, "CONT"=>18, "SYS"=>31, "INT"=>2, "WINCH"=>28, "KILL"=>9, "USR2"=>12, "USR1"=>10, "VTALRM"=>26, "TSTP"=>20, "FPE"=>8, "XFSZ"=>25, "XCPU"=>24, "BUS"=>7, "EXIT"=>0, "TRAP"=>5, "HUP"=>1, "POLL"=>29, "PROF"=>27, "TTIN"=>21, "CLD"=>17, "CHLD"=>17, "TERM"=>15, "ABRT"=>6, "IOT"=>6}
と定義されています。