问题导入:大家应该都对进程有一个概念,我们从硬盘上找到我们写下的.c文件代码,在linux中我们通过输入驱动命令让预处理器、编译器、汇编器和连接器给我们最后生成一个可
执行的目标文件,然后再给一个执行命令,将这个可执行的文件加载进内存执行。就在可执行文件加载进内存的时候,生成一个新的进程,供cpu管理和控制它的执行。那这里就有一个疑问了,
这里cpu是自动为我们生成了一个进程,它是怎样生成的呢?我们自己能不能手动创建一个新的进程呢?
执行的目标文件,然后再给一个执行命令,将这个可执行的文件加载进内存执行。就在可执行文件加载进内存的时候,生成一个新的进程,供cpu管理和控制它的执行。那这里就有一个疑问了,
这里cpu是自动为我们生成了一个进程,它是怎样生成的呢?我们自己能不能手动创建一个新的进程呢?
答案是肯定的,系统使用的是fork函数创建进程,fork是一个系统调用,如果我们想在自己的程序中手动的创建新进程,我们也可以使用这个函数。
首先,这个函数的声明是:pid_t fork(void);
使用fork()函数需要包含的头函数,pid_t是在头文件里定义的,所以这个文件也要包括。
函数的参数为空,不需要传入参数,但是这个函数的返回值很重要。调用fork()的函数我们称为父进程,而因为fork()而生成的另外一个进程称为子进程。父进程返回值为新进程的pid,而新进程返回值为0。
为什么一个函数调用可以返回两个值呢?
这是因为fork()一旦调用会产生两个一模一样的进程,所以在父进程中有一份自己的代码,而子进程中也复制了一份和父进程一样的代码,所以相当于在两个进程中执行一个代码,
那两个进程中每个进程都有自己的一个返回值,且仅返回了一个,这样的角度看,还是符合c语言的语法,函数只有能返回一个值。
还有一个小地方需要强调一下