UNIXのfork/exec

解決


kokope  2006-10-26 19:17:33  No: 63431

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


επιστημη  2006-10-26 22:34:52  No: 63432

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


PATIO  2006-10-27 00:09:39  No: 63433

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


kokope  2006-10-27 00:09:41  No: 63434

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


PATIO  2006-10-27 00:13:02  No: 63435

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

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


yoh2  2006-10-27 08:05:21  No: 63436

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

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


Ban  2006-10-27 08:24:51  No: 63438

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

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

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


PATIO  2006-10-30 20:25:44  No: 63439

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加