- 在現有的Linux內核在實現fork()函數時往往是一種"寫時賦值"的情況
- 父子之間的進程ID是不同的,其餘大部分資源都是被複制的
在下面的例子中可以看到,全局變量,局部變量,動態申請的變量都是複製的,互不影響
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
/*父子進程的共享資源*/
int global = 1;/*初始化的全局變量,存在data段*/
int main(void)
{
pid_t pid = 1;/*存儲進程id*/
int stack = 1;/*局部變量,存在棧中*/
int *heap;/*指向堆變量的指針*/
heap = (int *)malloc(sizeof(int));
*heap = 3;/*設置初值3*/
pid = fork();/*創建一個新的進程*/
if (pid < 0)
{
perror("fail to fork");
exit(-1);
}
else if (pid == 0)
{
/*子進程,改變變量的值*/
global++;
stack++;
(*heap)++;
/*打印出變量的值*/
printf("In sub-process,global: %d,stack: %d,heap: %d\n", global, stack, *heap);
exit(0);
}
else
{
/*父進程*/
sleep(2);/*休眠兩秒鐘,確保子進程已執行完畢,在執行父進程*/
printf("In parent-process,global: %d,stack: %d,heap: %d\n", global, stack, *heap);
}
return 0;
}
/*父子進程的共享資源*/