父子進程fork之後的一些注意點

  • fork()函數調用之後子進程從fork()語句之後開始執行,其原因是子進程複製了程序計數器
  • 在剛剛fork之後父子進程之間的數據段(全局變量),棧段(局部變量),堆段(動態內存),代碼段,程序計數器等都是相同的(在當前的linux版本中遵從的是讀時共享寫時複製的原則)
  • 父子之間不同的是進程ID,fork函數的返回值
  • 共享的是文件描述符以及mmap建立的映射區

    全局變量是寫時複製的例子

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <cstring>
#include <fcntl.h>
#include <sys/stat.h>

/*fork共享*/
int var = 0;
int main()
{
	pid_t pid;
	pid=fork();
	if (pid > 0)//父進程
	{
		sleep(2);
		printf("var:%d\n", var);
	}
	else if(pid==0)
	{
		var = 1;
		printf("var:%d\n", var);
	}
}
/*fork共享*/

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