fork之后,子进程与父进程的关系
在早期,fork之后,新进程会拷贝存储空间中正文、数据、堆栈内容进行拷贝;fork之后,先运行父进程还是子进程,取决于进程调度。早期代码端共享,数据段进行copy一份,子进程fork之后对数据的操作并不改变父进程中的数据。
之后,linux更新,fork之后进行写实拷贝,如果后边代码不对赋值参数进行改变的话,采用共享这个内存空间。
代码演示:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
pid_t pid;
int data=10;
printf("father pid=%d\n",getpid());
pid=fork();
if(pid>0){
printf("this is father print\n");
}
if(pid==0){
printf("this is child print,pid=%d\n",getpid());
data=data+100;
}
printf("data=%d\n",data);
return 0;
}
编译运行结果
father pid=21988
this is father print
data=10
this is child print,pid=21989
data=110