fork复制进程

本文介绍了Linux中的进程概念及其状态,重点讲解了fork函数如何复制进程,包括PCB的复制和PID的分配。同时,讨论了写时拷贝技术在fork过程中的应用,该技术能有效提高复制效率,尤其是在配合exec函数使用时。
摘要由CSDN通过智能技术生成

1.进程:一个正在运行中的程序;

2.PCB:进程控制块

进程控制块是用一个结构体struct task_struct来实现;

3.进程的状态:

就绪,阻塞,运行

4.并发与运行

fork是把已有的进程复制一份,当然把PCB也复制了一份,然后申请一个PID,子进程的 PID(父进程的)+1;

子进程的PID=父进程的PID+1; 如果父子进程想要做不同的事情,那么我们通过返回值来判断;

1 #include <stdio.h>
2 #include <assert.h>
3 #include <unistd.h>
4 #include <string.h>
5 #include <stdlib.h>
6
7 int main()
8 {
9 char *s=NULL;
10 int n=0;//控制父子进程执行的次数
11
12 pid_t id=fork();
13 assert(id!=-1);
14
15 if(id==0)//子进程
16 {
17 s="child";
18 n=3;
19
20 }
21 else
22 {
23 s="parent";
24 n=7;
25 }
26 //父子进程一起运行
27 int i=0;
28 for(;i<n;i++)
29 {
30 printf("s=%s\n",s);
31 sleep(1);
32 }
33 exit(0);
34 }

 getppid:得到一个进程的父进程的PID;

getpid:得到当前进程的PID;

写时拷贝技术

在进行 fork 复制进程时,并不马上进行父进程的地址空间的完全拷贝。而是使用 了写时拷贝(Copy-On-Write)技术,即就是让父进程和子进程共享父进程的页面,当父进程或子进程中任意一个进程试图修改某个页面时,再将其拷贝一份给子进程。这样可以延迟页面拷贝,提高 fork 复制的效率。另外,通常 Linux 中的新进程都是通过 fork+exec 实现的,如果 fork 后需要执行 exec 那么直接就不需要拷贝了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值