Hamigaki.Process for POSIX

POSIX用の実装もとりあえずできました。
POSIX用差分
execve()したsortが上手く動かないと思ったら、argvの終端をNULLポインタでなく、空文字列("")にしていました。


その他の修正

  • child::wait()の戻り値用にstatusクラスを作った
  • chileのデストラクタで(まだ生きていたら)子プロセスを強制終了するようにした


hamigaki::process::statusは、軽量のオブジェクトにすることとシステムヘッダをインクルードしないことを両立させるため、ネイティブなexitステータスではなく、その値を分解した形で保持している点が、Boost.Processと異なります。


また、子プロセスの強制終了処理を追加したのは、child::wait()を呼ぶ前にchildオブジェクトが破棄されると、子プロセスがデタッチされたり(Win32)、ゾンビプロセスになったり(POSIX)するからです。
childクラスの用途を考えると、強制終了が適切だと考えました。


さて、とりあえず動いてますが、子プロセスに関しては非常にややこしい問題がたくさんあるので、明日はそれに対処していくことにします。