每次调用fork()函数之后,父线程和创建出的子线程都是从fork()后开始执行

Posted 朝闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每次调用fork()函数之后,父线程和创建出的子线程都是从fork()后开始执行相关的知识,希望对你有一定的参考价值。

Linux下多少个"-"将被打印:
1
2
3
4
5
6
7
8
int main(void){
  int i;
  for(i=0;i<4;i++){
  fork();
  printf("-\n");
 }
 return 0;
}

 

i=0时,主进程和其创建的子进程分别打印‘-‘,  打印2个
i=1时,之前两个进程打印‘-‘, 每个进程又创建新的子进程, 共打印4个‘-‘
i=2时,之前的四个进程分别打印‘-‘, 并创建新的子进程, 故共打印8个‘-‘
i=3时,之前的8个进程分别打印‘-‘, 并创建新的子进程,故共打印16个‘-‘
综上所述, 共打印2+4+8+16=30个
 
每次调用fork()函数之后,父线程和创建出的子线程都是从fork()后开始执行,意味着父线程和子线程将分别执行一次printf。
 
所以  1次 fork()调用  
对应着 2次printf()调用 
对应着 创建1个子线程
 
i = 4时,一共创建了2^4-1个子线程,也就是有15次fork()调用, 所以调用了30次printf
https://www.nowcoder.com/questionTerminal/9b52b1a86ae64daab81f609f3a86c02f

以上是关于每次调用fork()函数之后,父线程和创建出的子线程都是从fork()后开始执行的主要内容,如果未能解决你的问题,请参考以下文章

什么是子进程和父进程

12.9 线程与fork

fork() 和原始父进程的子进程

fork出的子进程和父进程

fork出的子进程和父进程

Unix环境高级编程fork函数总结