From: f-miura@... (MIURA, Fumiaki) Date: 2010-08-11T09:31:32+09:00 Subject: [ruby-dev:41991] Re: [Bug #3673] PTY.getpty with IO.pipe doesn't finish on FreeBSD At Tue, 10 Aug 2010 23:32:24 +0900, Tanaka Akira wrote: > ^C する前に ps した結果: > freebsd8(23:28:08)% ps u68602 > USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND > akr 68602 0.0 0.1 1536 664 3 SE+ 11:28PM 0:00.00 ./a.out > > やっぱ E ですが、E って具体的にはどういう状況なのかなぁ。 FreeBSDは読んだことがないので推測ですが… 1) 一般に、exit()したプロセスのprocess IDは、新たに作られたプロセスに再 割当てします。 2) sessnion leaderのprocess IDはsession IDでもあるので、当該sessionに属 するプロセスが存在する期間、exit()したsession leaderのprocess IDを再 割当ててはいけません。 3) 2の欠番扱いのために、process IDを記録しているデータ構造にその旨記録 しておくしかありません。exit()しても当該entryは開放できないのです。 3のentryの可視性をPOSIXは規定していない(ように読める)ので、1実現手法と してこういうことをしてるんじゃないでしょうか。 exit(2)が引き伸ばされていれば、3が実現できてることになりますから。 この解釈が正しいなら、setpgid()でも同じ結果になると思われます。 -- ▽R← 三浦史光 X;M R←+/,(?1↑ρM)/M←X≠.- 運命 X▽