我了解 fork,需要帮助了解原因
if(fork() && !fork())
不评估第一个子进程中的第二个 fork 过程。
Parent 返回 [X|x>0] ^ ![Y|y>0]
child.0 返回 0 并且不调用第二个 fork 过程
child.1 返回 [X|x>0] ^ !0
为什么 child.0 不调用第二个 fork 过程?
谢谢
如果左操作数的&&
计算结果为 0(假),那么无论右操作数的值如何,整个表达式都将计算为 0(假),因此根本不计算右操作数。
您正在使用&&
运算符,并且一旦评估返回 0,if 就会立即终止。基本上,如果从左到右执行,并且在&&
运算符的情况下,一旦遇到 0(或 false),就会立即终止。
fork()
当第一个返回 0 时不会调用第二个,因为无论返回什么,fork()
布尔表达式都将始终为 0 。因此,为了提高性能,第二个是短路而不执行。(0 && fork())
fork()
fork()
当您说孩子返回某些东西时, fork() 的返回值并不是您似乎认为的孩子返回的值。要检查您是否必须使用 wait()。