#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()没有共享内存资源,仅仅是复制了父进程的所有资源