fork 在现有进程下创建一个新的进程,现有进程为父进程,新创建的进程为子进程。子进程创建后,获得父进程的数据空间,堆栈的副本(子进程改变,父进程不改变)
父子进程的执行顺序是不确定的,取决于内核的调度算法,如果要求父子进程之间的相互同步,则要求某种形式的进程间通信(IPC) 下面代码在父进程中sleep了2秒,但是不保证子进程可以完全执行完毕。
进程执行的示意图
运行结果 :
1 process id:2954
2 IM CHILD parent id:2954, value = 1
3 IM FATHER child id:2955, value:0
1 #include <unistd.h>
2 #include <sys/types.h>
3 #include <stdio.h>
4
5 int main(){
6 int value = 0;
7 printf("process id:%d\n", getpid());
8 int pid = fork();
9 if(pid < 0){
10 puts("ERROR ");
11 }
12 else if(!pid){ //child
13 ++value;
14 printf("IM CHILD parent id:%d, value = %d\n", getppid(), value);
15 }else{ //parent
16 sleep(2);
17 printf("IM FATHER child id:%d, value:%d\n", pid, value);
18 }
19 return 0;
20 }
21