それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Rubyのシグナル番号を指定してプロセスグループを殺す

Rubyでプロセスを殺すことができる

Process.kill("KILL", 123)

で出来るのだけど。プロセスグループをそのままKILLしてみたかった。

Process.kill(signal, pid ... )

pid で指定されたプロセスにシグナルを送ります。signal はシグナル番号か名前(文字列またはSymbol)で指定します。
負の値を持つシグナル(あるいはシグナル名の前に-)もしくは 負の値を持つプロセス番号を与えるとプロセスではなくプロセスグループにシグナルを送ります。 負の値のプロセス番号はプロセスグループ番号を符号反転したものと見なされます。
全てのシグナル送信に成功した場合、指定した pid の数を返します。 失敗した場合は例外 Errno::EXXX が発生します。
存在しないシグナルを指定した場合は、例外 ArgumentError が発 生します*2
trapも参照してください。

Process.kill(signal, pid ... )

シグナル番号ってどれ?

負の値を持つシグナル(あるいはシグナル名の前に-)もしくは 負の値を持つプロセス番号を与えるとプロセスではなくプロセスグループにシグナルを送ります。

シグナル番号について

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}

と定義されています。

広告を非表示にする