创建进程
myproc.c
#include <stdio.h>
#include <unistd.h>
int main()
{
printf("我是父进程\n");
pid_t id = fork();
if(id < 0)
{
printf("创建子进程失败\n");
return 1;
}
else if(id == 0)
{
while(1)
{
printf("我是子进程: pid: %d ,ppid: %d\n",getpid(),getppid());
sleep(1);
}
}
else
{
while(1)
{
printf("我是父进程: pid: %d ,ppid: %d\n",getpid(),getppid());
sleep(1);
}
}
}
子进程0,父进程1,失败-1
查看进程
ps axj | grep myproc
描述,fork创建子进程时,操作系统都做了什么
fork之后子进程和父进程共享全部代码,而不仅仅只有after后的
写时拷贝
创建子进程,不需要将不会被访问的,或者只会读取的数据拷贝一份将来会被父进程或者子进程写入的数据才会拷贝但是一般而言os无法提前知道哪些空间可能会被写入,即使拷贝也不知拷贝时间
所以os使用写时拷贝技术将父子进程的数据进行分离