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▽