跳动百科

forklift(fork)

陆黛琼
导读 大家好,我是小跳,我来为大家解答以上问题。forklift,fork很多人还不知道,现在让我们一起来看看吧!1、1、在Linux下产生新的进程的系统

大家好,我是小跳,我来为大家解答以上问题。forklift,fork很多人还不知道,现在让我们一起来看看吧!

1、

1、在Linux下产生新的进程的系统调用就是fork函数,这个函数名是英文中“分叉”的意思。为什么取这个名字呢?因为一个进程在运行中,如果使用了fork,就产生了另一个进程,于是进程就“分叉”了,所以这个名字取得很形象。下面就看看如何具体使用fork,这段程序演示了使用fork的基本框架:

2、void main(){

3、int I;

4、if ( fork() == 0 ) {

5、/* 子进程程序 */

6、for ( I = 1; I <1000; I ++ )

7、printf("This is child process ");

8、}

9、else {

10、/* 父进程程序*/

11、for ( I = 1; I <1000; I ++ )

12、printf("This is process process ");

13、}

14、}

15、程序运行后,你就能看到屏幕上交替出现子进程与父进程各打印出的一千条信息了。如果程序还在运行中,你用ps命令就能看到系统中有两个它在运行了。

16、那么调用这个fork函数时发生了什么呢?一个程序一调用fork函数,系统就为一个新的进程准备了前述三个段,首先,系统让新的进程与旧的进程使用同一个代码段,因为它们的程序还是相同的,对于数据段和堆栈段,系统则复制一份给新的进程,这样,父进程的所有数据都可以留给子进程,但是,子进程一旦开始运行,虽然它继承了父进程的一切数据,但实际上数据却已经分开,相互之间不再有影响了,也就是说,它们之间不再共享任何数据了。而如果两个进程要共享什么数据的话,就要使用另一套函数(shmget,shmat,shmdt等)来操作。现在,已经是两个进程了,对于父进程,fork函数返回了子程序的进程号,而对于子程序,fork函数则返回零,这样,对于程序,只要判断fork函数的返回值,就知道自己是处于父进程还是子进程中。

本文到此讲解完毕了,希望对大家有帮助。