Fork系统调用输出:

时间:2013-08-06 16:14:08

标签: c fork

请解释以下代码的输出:

#include<stdio.h>
#include<stdlib.h>

int main(){
    if(fork()&&fork()){
        fork();
        printf("hello");
    }   
}

输出:hellohello

1 个答案:

答案 0 :(得分:1)

你必须理解fork()返回两次,一次返回父级,一次返回子级。子项返回0,父项返回子进程的pid。知道了这一点,我们可以推断出代码:

因为在C中,0为假,而其他任何条件都为真,所以会发生以下情况:

#include<stdio.h>
#include<stdlib.h>

int main(){
       //Create 2 new children, if both are non 0, we are the main thread
       //Jump into the if statement, the other 2 children don't jump in and go out of mains scope
    if(fork() && fork()){
        //Main thread forks another child, it starts executing right after the fork()
        fork();
        //Both main and the new child print "hello"
        printf("hello");
        //both main and child return out of if and go out of scope of main.
    }   
}

应该注意的是,一旦主要执行第一个fork()孩子继续fork()自己的孩子。但是由于&&运算符,子项得到(0 && somepid)的计算结果为false,这就是为什么你没有得到3个hellos。