UNIXのfork/exec

解決


kokope  2006-10-26 19:17:33  No: 63431  IP: [192.*.*.*]

UNIXからの移植で、fork/execを使っているところをどうしようか考えています。Windowsだと、exec元のプロセスがなくなり、プロセスが2つにならないようです。Windowsの場合は、マルチスレッド化するのが常套手段なのでしょうか?

編集    削除
επιστημη  2006-10-26 22:34:52  No: 63432  IP: [192.*.*.*]

CreateProcess-APIじゃダメなんでしょか?

編集    削除
PATIO  2006-10-27 00:09:39  No: 63433  IP: [192.*.*.*]

マルチスレッドで済むのであれば、マルチプロセスにあえてする必要もないと思います。
この辺はそのプログラムの中身がわからないと何ともいえないのでkokopeさん自身の判断になると思います。
UNIXで組む時はマルチプロセスせざる得ないからしているのですし、
考え方次第だと思いますよ。

編集    削除
kokope  2006-10-27 00:09:41  No: 63434  IP: [192.*.*.*]

OKです。ありがとうございました。

編集    削除
PATIO  2006-10-27 00:13:02  No: 63435  IP: [192.*.*.*]

失礼。
UNIXで組む時はマルチプロセスにせざる得ないからしているのですし、
ですね。

ちなみにマルチスレッドの方がデータのやり取りなどはずっと楽に出来ます。
もちろん排他処理が必要なところには排他処理を入れる必要がありますけれど。
マルチスレッドの場合、同一プロセス内のスレッド間ではグローバル領域が
共有されています。ただし、アクセスに排他処理が必要であれば、きちんと
排他処理を組み込んでやる必要はあります。

編集    削除
yoh2  2006-10-27 08:05:21  No: 63436  IP: [192.*.*.*]

fork()と同等の機能を実現するのは、

http://www.sixnine.net/cygwin/translation/cygwin-ug-net/highlights.html
(1.6.7 プロセスの生成 を参照して下さい)

こういった記事が存在することを考えるとかなり無理があるのではないでしょうか。
マルチスレッドプログラムに変換できるならそうするのが無難だと思います。

ところで、

> Windowsだと、exec元のプロセスがなくなり、プロセスが2つにならないようです。

この仕様はUNIXでも同じハズですが。

編集    削除
yoh2  2006-10-27 08:10:03  No: 63437  IP: [192.*.*.*]

すでに解決済みでしたね。チェックを見落していました。すみません。

編集    削除
Ban  2006-10-27 08:24:51  No: 63438  IP: [192.*.*.*]

元がプロセス前提なので、別領域になることを前提のコードもありえますし、
勝手にグローバルを共有することが幸せとは限らないわけですが。

UNIXでも普通はpthreadなり独自スレッドなりありますし。

# 一応、Cygwinってのも常套句ではありますが思いし個人的には使わない…

編集    削除
PATIO  2006-10-30 20:25:44  No: 63439  IP: [192.*.*.*]

すいません、私がマルチプロセスしかやっていなかったので
そっちの方しか頭にありませんでした。

そういえば、最近はUNIXでシステム組んでないなぁと
すっかりWindowsの人になってしまった。(遠い目)

編集    削除