Thursday 2 February 2006

getppid



fj で見掛けたこれ。確か質問が新出さんで、答えたのがお代官様。

 $ perl -e 'exit if fork; sleep 1; print getppid, "\n"'

親が死んだかどうかを見ているわけだけど、動かなくなったらしい。ふーん、ぐらいに思ってたが、自分が使っているscriptで使っていることを発見。そして、ちゃんと動かず。だって、去年まで動いていたのに! ってことは変更されたのは「今年から」かよ。

しかし、何故か予感がして、その記事は取っておいたんだよな。つうか、どうして気づいたのか自分でも少し不思議。そこだけ抜いてテストしたらばっちりdead lock。

kill(pid,0)でerrnoがESRCになるか見るというのがあるらしく、

 my $ppid = getppid;
 do {
  last if ($ppid==1);
  sleep 1;
 } while ((kill 0,$ppid)!=0);

とかしたが、なんか微妙に止まってしまう様子。いや、ここじゃないかも知れないが。別に親が生きていようが死んでいようが関係ないんじゃないかなぁ。取っちゃえ、って思わないでもないんだが...

No comments: