操作系统 fork与exec

前言

学习操作系统,首先便要学到process概念。process是什么?Process – a program in execution。七十年代UNIX最先提出多进程的构想,之后该构想便广泛用于linux与unix操作系统中。fork()函数给程序猿们提供了简便的多进程编程方式。

fork() creates new process

exec() used after a fork to replace the process’ memory space with a new program

下面就来看看fork()函数和exec()究竟干了什么。

fork()

fork() 创建一个新的进程,该进程与主进程为父子关系。

Linux下一个进程在内存里有三部分的数据,就是"代码段"、"堆栈段"和"数据段"。

"代码段",顾名思义,就是存放了程序代码的数据,假如机器中有数个进程运行相同的一个程序,那么它们就可以使用相同的代码段。"堆栈段"存放的就是子程序的返回地址、子程序的参数以及程序的局部变量。而数据段则存放程序的全局变量,常数以及动态数据分配的数据空间(比如用malloc之类的函数取得的空间)。这其中有许多细节问题,这里限于篇幅就不多介绍了。系统如果同时运行数个相同的程序,它们之间就不能使用同一个堆栈段和数据段。  

fork() 创建的子进程完全拷贝主进程,所以子进程的运行完全与主进程相同,且与主进程并行处理,竞争CPU的资源。

不同的是,主进程与子进程的fork()返回值不同,子进程中fork()的返回值是0,而主进程的fork()返回值是产生的子进程的进程id。

举个栗子:

#inclu
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值