C语言 进程控制---创建进程fork()函数

时间:2024-12-08 08:32:50
#include "sys/types.h"
#include "stdio.h"
#include "stdlib.h"
#include "unistd.h"
int main()
{

	pid_t pid;
	/*
		需要引入sys/types.h 和 unistd.h两个头文件
		创建进程 返回子进程的id 创建失败,返回-1;并提示错误信息,
		EAGAIN:表示fork()函数没有足够的内存用于复制父进程的分页表和进程结构数据
		ENOMEM:表示fork()函数分配必要的内核数据结构时,内存不足
		fork()函数会复制进程的所有资源,包括进程环境、内存资源,不与父进程共享
	*/
	int var=1;	//测试是否共享堆栈段
	pid = fork();
	if (pid<0)
	{
		printf("fork error!\n");
	}
	else if (pid==0)
	{
		var=var+1;
		printf("in the child process! pid:%d,var:%d\n",pid,var);
	}
	else
	{
		var=var+3;
		printf("in the parent process pid:%d,var:%d\n",pid,var);
	}
	exit(0);
 }

打印结果:

in the child process! pid:0,var:2
in the parent process pid:4316,var:4
[Finished in 0.5s]

由此看出 fork()没有共享内存资源,仅仅是复制了父进程的所有资源