请解释以下代码的输出:
#include<stdio.h>
#include<stdlib.h>
int main(){
if(fork()&&fork()){
fork();
printf("hello");
}
}
输出:你好你好
您必须了解 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.
}
}
应该注意的是,一旦 main 执行了第一fork()
个子进程,它就会继续运行fork()
它自己的子进程。但是由于&&
孩子得到的运算符的(0 && somepid)
计算结果为假,这就是为什么你没有得到 3 hellos。