int a = fork();int b = fork();printf(“a: %d,b: %d\n”,a,b);
让我们进一步假设将逐个给出新的PID,因此第二个给定的PID将是2,然后是3等.
可能的输出是:
a:2,b:3a:2,b:0a:0,b:4a:0,b:0
我有一些麻烦试图理解上面代码的输出,尤其是为什么a:0,b:4和a:2,b:3.
解决方法 你知道的The return value is the zero in the child and the process-ID number of the child in the parent,or -1 upon error.
那么,让我们一步一步地看到这里发生了什么.
当调用fork()时,它会创建一个ID为n的新子节点,然后在子节点0和父节点n中返回.
因此,假设我们的进程为pID 1,当第一个fork()被调用时,它会创建一个带有pID 2的进程,然后返回一个值. a将在进程2(子进程)中具有值0,并且在进程1(父进程)中将具有值2.
然后每个进程将调用fork()并将返回值分配给父进程中的b.在孩子中,b的值为0.
无论如何,我认为这个架构将简化理解:
主要开始:
||int a = fork(); // It creates a new process,and the old one continues going||-------------------------|a = 2; /* Parent */ a = 0; // Child| || |int b = fork(); int b = fork(); // Each one create a new process| || |-----------------------------|| /* Child -> Parent */ // Child -> Child| a = 0; b = 4; a = 0; b = 0|||||-----------------------------|/* Parent -> Parent */ // Parent -> Childa = 2; b = 3; a = 2,b = 0;总结
以上是内存溢出为你收集整理的c – 无法理解fork()输出全部内容,希望文章能够帮你解决c – 无法理解fork()输出所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)