前言
学习操作系统,首先便要学到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