Gauche > Archives > 2014/07/01

2014/07/01 00:33:51 UTC齊藤
#
プロセスやスレッドがらみのことは微妙なタイミングの差が影響することはしばしばあるのでいい感じにテストするのも難しいですよね。
2014/07/01 01:08:44 UTCshiro
#
あっそうか、親が死んだら直ちにinitが引き取るわけじゃなくて親の親が引き取るんだっけ。
2014/07/01 01:16:28 UTCenami
#
親の親が引き取るってことはないと思います.子(孫の親)が孫を fork した時点で,そこから先は現状同期処理がないので,子(孫の親)が exit するのが早いか,孫が exec してその先の動作を実行するのが早いかが,タイミング依存だと思うんです.
2014/07/01 01:21:46 UTCenami
#
通常は前者が早くて孫がテストを実行する時点では reparent 終わっていてテストが通るけど,後者が早いと reparent される前 (親がまだ exit する前) にテスト実行しちゃって失敗するんじゃないでしょうか.
2014/07/01 01:22:01 UTCshiro
#
む。ああ、pgidをセットするのはsetsidで、その後出力したりする時にまだ親がexit()を実行してない可能性があるのか。
#
ここのテストはむしろ親が1になるまで待つことで同期すべきかな。
2014/07/01 01:31:28 UTCenami
#
それか,pipe でも作って同期するか,ですかね.
2014/07/01 01:37:29 UTCshiro
#
厳密に言えば、親のexit処理中にパイプが閉じられるのと、死亡処理が終わって子のppidが付け替えられる間ってのが存在しませんか。
2014/07/01 01:40:27 UTCenami
#
あ,たしかにそうですね.
2014/07/01 01:43:17 UTCenami
#
実際,bsd も linux も fd 閉じてから reparent してるようなので,パイプで同期はできませんね.
2014/07/01 01:44:34 UTCshiro
#
ppidをポーリングしつつループ、でここはいけると思います。