2011年1月23日日曜日

perl からプロセスグループを kill する構文

だいぶ前に自分で書いた perl スクリプトを見ていたら、次のような記述になっていた。
...
    if ($stop_flag) {
        kill -9, $my_pgid ;
...
あれれ、もしかしてプロセスグループを kill するつもりが、プロセスグループリーダー (PID=PGID) だけ kill するという指定になってないか? バグってないか?!
kill 9, -$my_pgid と書くのが正しいのではないか? うえー、バグってるかなと思った。
そこで、man perlfunc を読んでみたのだが、kill -9, $my_pgid で正しいようだ。きっと書いた当時は man を読んだのだろう。この場合、わかりにくいし、コメントでも書いておけば良かった。
       kill SIGNAL, LIST
...
               Unlike in the shell, if SIGNAL is negative, it kills process
               groups instead of processes.  (On System V, a negative PROCESS
               number will also kill process groups, but that's not portable.)
               That means you usually want to use positive not negative sig-
               nals.  You may also use a signal name in quotes.
シェル (bashなど) とは違い、負の SIGNAL を指定したら、プロセスグループを kill するとある。

2011-01-29追記
書き忘れましたが、もちろんのこと、strace で実際にプロセスグループ宛になっていることを確認しています。

0 件のコメント:

コメントを投稿

人気ブログランキングへ にほんブログ村 IT技術ブログへ