2.4、父子进程虚拟地址空间

2.4、父子进程虚拟地址空间

1.父子进程简介

子进程会复制父进程用户区数据,内核区也会进行复制,pid不一样
在这里插入图片描述

2.写实拷贝

在这里插入图片描述

  1. 传统fork() :
  • 一般将所有资源复制给新创建的进程,而如果新进程立即执行一个新的印象,所有的拷贝都会前功尽弃。
  1. 写实拷贝:
  • 原本数据只有只读权限,这个时候父进程与子进程共享一块内存,例如num = 10,不修改的时候父子进程指向同一个num = 10,需要修改的时候才会从系统中获取一块内存,这个之后关于num = 10的内存就会变得相互独立

3.举例说明

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
    //创建子进程
    pid_t pid = fork();
    int num = 10;

    //判断是子进程还是父进程
    if (pid > 0)
    {
        printf("pid: %d\n", pid);
        //大于0,返回的就是子进程的id号
        num += 20;
        printf("parent is %d。\n", num);
        printf("I am Parent. pid: %d ppid:%d\n", getpid(), getppid());
    }
    else if (pid == 0)
    {
        printf("pid: %d\n", pid);
        //等于0,表示pid为子进程
        num += 100;
        printf("child is %d。\n", num);
        printf("I am child. pid: %d ppid:%d\n", getpid(), getppid());
    }
    else 
    {
        perror("fork");
        return -1;
    }

    for (int i = 0; i < 5; i ++ )
    {
        printf("i: %d, pid: %d\n", i, getpid());
        sleep(1);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值