有人可以帮我理解fork在这种情况下是如何工作的吗?

时间:2016-11-26 19:10:12

标签: c fork logical-operators

我有这个程序,我觉得有点误导和难以理解:

int i=2;
int j=10;
int p;

while(--i && (p=fork())
{
    if(p<0)
        exit(EXIT_SUCCESS);
}
j=j+2;
if(p==0)
{
   i=i*3;
   j=j*3;
}
else
{
    i=i*3;
    j=j*2;
}
printf("pid=%d i=%d j=%d\n",getpid(),i,j);

该计划产生以下结果:

  

父级:PIDHERE,i = 0,j = 24。

     

儿童:PIDHERE,i = 3,j = 36。

但为什么会发生这种情况呢?如果父有i = 0,则表示while执行了两次,但是并不意味着创建了两个子而不是一个,因为while有fork()语句?

此外,什么时候完全停止循环? (逻辑表达式与fork()混淆!)。

2 个答案:

答案 0 :(得分:2)

<pre> mid => messages id sender => The sender of the message receiver => The receiver of the message msg => The message sent f_msg_date => date in which the message was sent </pre> 预先裁定--ii第一次评估其条件时,while的值为i。第二次,1的值为i。所以,循环只会产生一个孩子。

0看到whilei(在父级中),或者0返回fork(在孩子中)时0停止。

答案 1 :(得分:1)

由于precrement,while循环基本上等同于:

i=1;
p=fork();
if(p<0)
    return 0;
else if(p)
    i=0;

fork()只被调用一次。