私はフォークを理解しています、理由を理解する助けが必要です
if(fork() && !fork())
最初の子プロセスの2番目のフォーク手順を評価しません。
親は[X|x> 0] ^![Y | y> 0]
を返しますchild.0は0を返し、2番目のフォークプロシージャを呼び出さない
child.1は[X | x> 0] ^!0を返します
child.0が2番目のフォークプロシージャを呼び出さないのはなぜですか?
ありがとう
の左側のオペランドが&&
0(false)と評価された場合、右側のオペランドの値に関係なく、式全体が0(false)と評価されるため、右側のオペランドはまったく評価されません。
演算子を使用していて&&
、評価が0を返すとすぐに終了する場合。基本的に、左から右に実行する場合、&&
演算子の場合は、0(またはfalse)が検出されるとすぐに終了します。
ブール式は常に 0 であるため、最初の値が 0 を返した場合、2 番目の値fork()
は呼び出されません。したがって、パフォーマンスを向上させるために、2 番目は短絡され、実行されません。fork()
(0 && fork())
fork()
fork()
fork() の戻り値は、子供が何かを返すと言ったときに、あなたが思うように子供が返すものではありません。確認するには、wait() を使用する必要があります。