fork函数

时间:2024-03-18 20:49:37编辑:奇事君

什么是fork,它是干什么的,有什么作用?求大神帮助

在Linux下产生新的进程的系统调用就是fork函数,这个函数名是英文中“分叉”的意思。为什么取这个名字呢?因为一个进程在运行中,如果使用了fork,就产生了另一个进程,于是进程就“分叉”了,所以这个名字取得很形象。下面就看看如何具体使用fork,这段程序演示了使用fork的基本框架: void main(){ int I; if ( fork() == 0 ) { /* 子进程程序 */ for ( I = 1; I <1000; I ++ ) printf("This is child process\n"); } else { /* 父进程程序*/ for ( I = 1; I <1000; I ++ ) printf("This is process process\n"); } } 程序运行后,你就能看到屏幕上交替出现子进程与父进程各打印出的一千条信息了。如果程序还在运行中,你用ps命令就能看到系统中有两个它在运行了。 那么调用这个fork函数时发生了什么呢?一个程序一调用fork函数,系统就为一个新的进程准备了前述三个段,首先,系统让新的进程与旧的进程使用同一个代码段,因为它们的程序还是相同的,对于数据段和堆栈段,系统则复制一份给新的进程,这样,父进程的所有数据都可以留给子进程,但是,子进程一旦开始运行,虽然它继承了父进程的一切数据,但实际上数据却已经分开,相互之间不再有影响了,也就是说,它们之间不再共享任何数据了。而如果两个进程要共享什么数据的话,就要使用另一套函数(shmget,shmat,shmdt等)来操作。现在,已经是两个进程了,对于父进程,fork函数返回了子程序的进程号,而对于子程序,fork函数则返回零,这样,对于程序,只要判断fork函数的返回值,就知道自己是处于父进程还是子进程中。 读者也许会问,如果一个大程序在运行中,它的数据段和堆栈都很大,一次fork就要复制一次,那么fork的系统开销不是很大吗?其实UNIX自有其解决的办法,大家知道,一般CPU都是以“页”为单位分配空间的,象INTEL的CPU,其一页在通常情况下是4K字节大小,而无论是数据段还是堆栈段都是由许多“页”构成的,fork函数复制这两个段,只是“逻辑”上的,并非“物理”上的,也就是说,实际执行fork时,物理空间上两个进程的数据段和堆栈段都还是共享着的,当有一个进程写了某个数据时,这时两个进程之间的数据才有了区别,系统就将有区别的“页”从物理上也分开。系统在空间上的开销就可以达到最小。


fork是什么

fork是餐叉,也是一种函数。fork,英语单词,主要用作名词、及物动词、不及物动词,作名词时意为“叉;餐叉;耙;(Fork)人名;(英、德)福克”,作及物动词时意为“叉起;使成叉状”,作不及物动词时意为“分叉;分歧”。复刻(英语:fork,又译作派生、分支)是UNIX或类UNIX中的分叉函数,fork函数将运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。这两个进程中的线程继续执行,就像是两个用户同时启动了该应用程序的两个副本。从一个软件包拷贝了一份源代码然后在其上进行独立的开发,创建不同的软件。这个术语不只意味着版本控制上的分支,同时也意味着开发者社区的分割,是一种形式的分裂。自由及开放源代码软件可以从原有开发团队复刻而不需要事先的许可,这也不会违反任何著作权法律。授权的专有软件(例如Unix)的复刻也时有发生。fork双语例句:1、Clear the soil of weeds and fork in plenty of compost.清除土中的杂草,然后叉入大量堆肥。2、We parted at the fork of a road.我们在叉路口分手。3、When you get to the fork in the road,bear right.走到岔道时向右拐。4、We've forked out a small fortune on their education.我们在他们的教育上可花了不少钱。5、The road forks right after the bridge.这条路过桥后岔开分成两条。6、We've forked out a small fortune on home improvements over the years.这些年来我们花了许多钱做房屋装修。7、Take the right fork.走右边的岔路。8、Why fork out for a taxi when there's a perfectly good bus service?有挺好的公共汽车,干吗要多掏钱坐出租汽车?9、Fork right after the bridge.过桥后走右边那条岔路。10、The path forks at the bottom of the hill.小径在山丘脚下分岔。

上一篇:马来西亚拿督

下一篇:软件测试流程