在父进程中调用fork()之后会产生两种结果:一种为分裂子进程失败,另一种就是分裂子进程成功。如果fork()失败,则返回-1,;否则会出现父进程和子进程两个进程,在子进程中fork()返回0,在父进程中fork()返回子进程的ID。
fork的时候发生什么? ①执行到这一句的时候,一个进程被创建了,这个进程与父进程一样,拥有一套与父进程相同的变量,相同的一套代码,这里可以粗浅的理解为子进程又复制了一份main函数。这里返回一个子进程的进程号,大于0。(第一次fork)
②子进程怎么执行:
子进程从fork()的位置开始执行,也就是说前面的代码不走,但是拥有之前的变量以及变量的值,与父进程的值一样,这次fork(),返回值是0,所以在子进程里面直接执行了pid==0这一个分支,父进程里面并不执行这个分支的语句。这就为我们在写mian函数的时候怎么写子进程的程序提供了一个方法来隔离代码。
#include<stdio.h> #include<stdlib.h> #include<unistd.h> int main() { int i; pid_t pid; for(i = 0; i < 5; i++) { pid = fork(); if(pid == 0) { break; } } if(i < 5) { printf("I'm %d child,pid = %u\n",i+1,getpid()); } else { printf("I'm parent\n"); } return 0; }