1, fork()问题
1. 基础知识: 1)fork函数总是“调用一次,返回两次”,在父进程中调用一次,在父进程和子进程中各返回一次。fork在子进程中的返回值是0,而在父进程中的返回值则是子进程的id。 2)子进程在创建的时候会复制父进程的当前状态(PCB信息相同,用户态代码和数据也相同)。 3)程序运行的结果基本上是父子进程交替打印,但这也不是一定的,取决于系统中其它进程的运行情况和内核的调度算法。 2. 第一个fork: 子进程A被创建,之后从fork函数往下执行与父进程相同的代码,即后一个fork和printf会被父进程和子进程A分别执行一次: 父进程打印的pid1和pid2是两个子进程的pid,即结果的第一行:pid1:3411, pid2:3412 子进程A打印的pid1和pid2是这个fork在子进程A中的返回(0)和子进程A中调用fork返回的pid,即结果的第二行:pid1:0, pid2:3413 3. 第二个fork: 这个fork会被父进程和子进程A都执行一遍。假设子进程B被主进程创建,子进程C被子进程A创建。子进程A也可以说是子进程C的父进程,为了避免混淆,我这里改叫主进程而不再使用父进程的概念。 子进程B的打印即结果的第三行:pid1:3411, pid2:0。其中,其中,pid1为复制的主进程的数据,pid2为该fork在子进程B中的返回。 子进程C的打印,即结果的最后一行:pid1:0, pid2:0。其中,pid1为复制的进程A的数据,pid2为该fork在子进程C内部的返回。 不能再多说,写得太多,我自己都快晕了。
3, 有关fork 的一点问题,程序是这样的:
先说个了例子:while(ture)无限循环。一直循环。while(false)永远也不会循环。这两句是解释while的使用while其实里边有的if的意思。。他只有判断条件为真的时候才会循环。不为真的时候不循环。和转向没关系。只有continue配合标记符号才能有跳转的意思。所以while(p2=fork()=1)括号里的应该是个布尔型结果。不是阵就是假。while不管里边是什么东西。他只在乎是真就循环。是假他就不循环了。for也一样。平时用的什么for(;i2.你的if并没有放在while{ }的结构体里.并不受while的影响.你只需要把if写在while的"{}"中就行了.3.第3个问题我没看明白你的意思..也许是你没明白p1==0 的意思..这是个判断.得出的值只有两个ture 或者false. ture就继续.你定义了int p1,p2 系统默认值就是0.. 既然你的frok()方法失败.就不执行了.程序里边没有任何赋值..怎么能得-1...我也是个新手..没学过C.. 懂点java和c++ 说的不对请大家批评.. 打的真累!~~~PS: ture不等于0; false等于0..也就是说ture代表非0的所有数都为真.false仅仅是代表结果为0.举例 while(x=5);//你就可以用这种思维方式去想.因为x=5不是false("0").所以他无限循环.while(x=0) 也是无限循环.因为x=0的值为"1"..此0非彼"0".你可以用输出语句.直接输出x=0; 屏幕显示就为1
4, fork什么意思
fork 英[fɔ:k] 美[fɔrk] 过去式:forked 过去分词:forked 现在分词:forking 复数:forks n. 1.餐叉 2.叉(挖掘用的园艺工具) 3.(道路或河流的)分岔处 4.叉状物 5.(自行车或摩托车的)车叉子 vi. 1.分叉 vt. 1.走岔路 2.叉; 耙 名词 n.1.餐叉 He picked up his fork and knife.他拿起刀叉。2.叉(挖掘用的园艺工具) We use forks for digging the ground.我们用耙子翻地。3.(道路或河流的)分岔处 Go up to the fork and turn left.走到岔口处向左拐。4.叉状物 5.(自行车或摩托车的)车叉子 不及物动词 vi.1.分叉及物动词 vt.1.走岔路 Fork left at the inn.去旅馆请走左岔路。2.叉; 耙 The farmer forked hay.这农民用叉子叉干草。
相关概念
进程
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
fork
fork:叉子、分岔、岔口、复刻,西方人吃饭用的东西,经常用作刀和叉。计算机程序设计中的分叉函数。返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程标记;否则,出错返回-1。