首页 > 试题广场 >

【单选】下面的程序会打印几个hello? int main(

[单选题]
下面的程序会打印几个hello?
#include<stdio.h>
#include<unistd.h>

int main(void) {
    fork();
    printf("hello\n");
    fork();
    printf("hello\n");
    while(1);
    return 0;
}


  • 2
  • 4
  • 6
  • 8
调用一次fork(),会产生和原来进程几乎一样的进程,第一次fork产生两个进程,分别执行了一次printf后,紧接着两个进程又分别调用fork,产生两个进程,此时有四个进程,执行4次printf,共执行6次printf。
编辑于 2020-08-04 20:22:41 回复(6)
hello hello hello hello hello hello
//拓展
#include<stdio.h>
#include<unistd.h>
int main(void) {
    fork();
    printf("hello ");
    fork();
    printf("hello ");
    fflush(stdout);
    while(1);
    return 0;
}
hello hello hello hello hello hello hello hello
fork()调用时,会将整个父进程空间会原模原样地复制到子进程中,包括指令,变量值,程序调用栈,环境变量,缓冲区,等等。所以程序在fork的时候,缓存会被复制到了子进程空间,所以,就多了两个,就成了8个,而不是6个。
发表于 2022-09-05 22:22:00 回复(0)
发表于 2020-08-14 00:41:10 回复(0)
两次fork函数,4个进程,8个hello
发表于 2023-04-15 17:58:33 回复(0)
后面的while(1)是什么意思?
发表于 2021-05-12 23:06:05 回复(2)