c - 是否有任何公式可以知道 fork() 如何近乎完美地复制当前进程?

标签 c fork

#include <stdio.h>
main()
{    
    int i, n=1; 

    for(i=0;i<n;i++) { 
        fork();
        printf("Hello!");
    }
}

如果我设置 n=1,我会感到困惑,它会打印 2 次 Hello。

  • 如果 n=2,则打印 8 次 Hello
  • 如果 n=3,它打印 Hello 24 次..
  • 等等..

最佳答案

没有单一的“公式”,因为不同的操作系统以不同的方式完成它。但是 fork() 所做的是复制该进程。通常涉及的粗略步骤:

  • 停止当前进程。
  • 新建一个进程,并初始化或复制相关的内部结构。
  • 复制进程内存。
  • 复制资源,如打开的文件描述符等。
  • 复制 CPU/FPU 寄存器。
  • 恢复两个进程。

关于c - 是否有任何公式可以知道 fork() 如何近乎完美地复制当前进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21858905/

相关文章:

c - 如何在 C 中将文本文件中的一行拆分为多个变量

c - 将尾数作为位返回

c - 放弃(root)特权后,fork()ing 是否有任何安全优势?

c - read() from pipeline 保证在 EOF 之前提供所有原子写入的数据?

c - fork() 打印两次之前的语句

c - 指针错误

c - X264 : How to access NAL units from encoder?

c - 使用位值进行 Base3 编码

c - 向进程共享信号量

c - 执行该程序时创建了多少个子进程?