欢迎来到朵拉利品网
知识中心
资讯
  • 资讯
  • 产品
  • 供应商
您的位置: 朵拉利品网 >  知识中心 > fork fork()问题
fork fork()问题
2019-08-29 06:26:37 来源:朵拉利品网

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。