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()返回的不同值。
- 在父进程中,fork返回新创建子进程的进程ID;
- 在子进程中,fork返回0;
- 如果出现错误,fork返回一个负值;
其实就相当于链表,进程形成了链表,父进程的fpid(p 意味point)指向子进程的进程id,因为子进程没有子进程,所以其fpid为0