讲解Linux中的的fork函数

进程的创建

说到创建一个进程,我们首先要了解Fork这个函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。

#include <unistd.h>
pid_t fork(void);

返回值:自进程中返回0,父进程返回子进程id,出错返回-1
内核中
在这里插入图片描述

  • 分配新的内存块和内核数据结构给子进程
  • 将父进程部分数据结构内容拷贝至子进程
  • 添加子进程到系统列表中去
  • fork返回,开始调度器的调度

fork之前父进程独立执行,fork之后,父子两个执行流分别执行。注意,fork之后,谁先执行完全由调度器
决定

**

fork函数的返回值

  • 子进程返回的事0
  • 父进程返回的是子进程pid

fork的常规用法

  • 父进程通过生成子进程来执行不同的代码段。
  • 一个进程可能要执行不同的程序

fork出现的问题

fork当它创建一个子进程时,将会创建一个新的地址空间,并且拷贝父进程的资源,而往往在子进程中会执行exec调用,这样,前面的拷贝工作就没有意义了。
为了解决这样一个问题 ,出现了Vfork
vfork()会产生一个新的子进程.但是vfork创建的子进程与父进程共享数据段,而且由vfork()创建的子进程将先于父进程运行

fork和vfork的区别

  • fork():子进程拷贝父进程的数据段,代码段.vfork():子进程与父进程共享数据段.
  • fork():父子进程的执行次序不确定.,vfork():保证子进程先运行,在调用exec或_exit之前与父进程数据是共享的,在它调用exec 或_exit之后父进程才可能被调度运行。
  • vfork()保证子进程先运行,在她调用exec或_exit之后父进程才可能被调度运行。如果在调用这两个函数之前子进程依赖于父进程的进一步动作,则会导致死锁。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值