2
import os
pid = os.fork()
if pid == 0:
        print("This is the child")
else:
        print("the child is pid %d" % pid)

上記のコードの出力では、if ブロックと else ブロックの両方が実行されます。最初にelse、次にifが続きます。この動作は予期されたものですか?

4

1 に答える 1

4

動作は実質的に指定されていません。

あなたが(おそらく)知っているようfork()に、現在のプロセスをコピーします。あるインスタンスでは を返し0、別のインスタンスでは新しいプロセスの pid を返します。

実際には2回実行しているため、両方の部分が使用されます。

どっちが先?これは、OS が最初にスケジュールするために 2 つのプロセスのどちらを選択するかによって異なります。OSによって傾向があるかもしれませんし、いつも同じかもしれませんが、その振る舞いに依存するべきではありません。

于 2013-09-12T10:24:18.603 に答える