fork v. 分叉

fork系统调用,用于创建一个子进程,它与进行fork()调用的进程(父进程)并发运行。创建新的子进程后,两个进程都将执行fork()系统调用之后的下一条指令。子进程使用相同的PC(程序计数器),相同的CPU寄存器,相同的打开文件,这些文件在父进程中使用。

怎么fork()的?

fork()函数,用来复制当前进程

#include <stdio.h> 
#include <sys/types.h> 
int main() 
{ 
    fork(); 
    fork(); 
    fork(); 
    printf("hello\n"); 
    return 0; 
} 

输出

hello
hello
hello
hello
hello
hello
hello
hello

去掉主进程,一共创建了7个子进程
函数fork的过程如下

fork()的返回值

fork调用的一个奇妙之处,就是它仅仅被调用一次,却能够返回两次(父进程返回一次,子进程返回一次)
下面是fork()返回的不同值。

  1. 在父进程中,fork返回新创建子进程的进程ID;
  2. 在子进程中,fork返回0;
  3. 如果出现错误,fork返回一个负值;

其实就相当于链表,进程形成了链表,父进程的fpid(p 意味point)指向子进程的进程id,因为子进程没有子进程,所以其fpid为0