父子進程之間的共享資源

  • 在現有的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;
}
/*父子進程的共享資源*/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章