Linux中的复制进程fork

     当在Linux终端中输入ps来查看当前进程时(终端暂无其他运行进程),会出现两个进程,一个是刚输入的ps,另一个是bash,仔细观察,ps的PPID是bash的PID,也就是说ps是bash的子进程,bash是ps的父进程,这就说明ps在启动时,执行的还是bash,那又是怎样完成高效的转换的呢?

     今天就来说复制进程fork:

图中展示了父进程和子进程的关系,父进程通过fork()复制后(要明确,复制的是整个PCB,PID是PCB结构体中的一个成员),然后经返回值返回,这时可以判断是父进程还是子进程,父进程返回值>0(第一个进程从1开始 )。所以,调用fork()的是父进程,新复制的称为子进程。

     fork()的优化——写时拷贝技术,可以延迟页面的拷贝,甚至免除页面的拷贝。和复制进程的最大区别就是,写时拷贝先拷贝页表,有修改时再复制,若无修改也就达到了免除页面的拷贝。还有一个需要注意的地方:写时拷贝是以页为单位的,哪怕这个页中只有一个字节被修改了,我们也需要将整个页面都复制出来一份(一页一般说是4K)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一如既往,微笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值