繁体   English   中英

用C语言编写的另一个Fork()程序

[英]Another Fork() program in C

因此,我在Fork()上继续遇到更多问题,并在名为geeksforgeeks的网站上找到了一些示例代码。 以下代码段:

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>

void forkexample() 
{
    int x = 1;

    if (fork() == 0)
        printf("Child has x = %d\n", ++x);
    else
        printf("Parent has x = %d\n", --x);
}
int main()
{
    forkexample();
    return 0;
}

现在,我明白了为什么解决方案可以是“ 孩子”有x = 2而“ 父”有x = 0,但是我在尝试可视化树时遇到了一些问题。 我想像的最大问题是,第一个if语句用于子进程,那么树的外观如何? 这是我根据该程序的可视化得出的结果。

图片

或者,由于if语句排在最前面(这是可能的,但else语句可以排在前面并同时运行),因此级别0上的主节点将成为子节点。

有什么帮助吗? 这种可视化是否正确,或者我缺少什么?

谢谢您的帮助,谢谢。

不,您的可视化是错误的。

分叉之后,您有两个过程:父级和子级。 (期)

单亲父母可能会产生多个孩子,每个人可能会产生自己的孩子。 但是在一个分支之后,“树”是两个“节点”。

不确定是否要绘制图形:

  • 随着时间的流逝,然后是,您是正确的,一个过程变成了两个。
  • 处理关系,然后否,您应该只有一个父母,一个孩子。
  • 执行路径,我想...有时会调用fork(),接下来您知道,您有两个进程执行if()语句。

我看不出问题在哪里..

模式很好,就像这样。 Fork()通过复制调用过程来创建一个新过程。 成功后,将在父级中返回子进程的PID,在子级中返回0。 如果失败,则在父级中返回-1,不会创建任何子级进程(google)。 您必须检查返回值,以确保您处于独立运行的子进程中。

尝试这个 :

#include <unistd.h>

int main() 
{
  pid_t p;
  int   x;

  x = 1;
  p = fork();
  printf("pid = %d\n", p);
  if (p == 0) {
    printf("Child has x = %d and pid = %d\n", ++x, p);
    sleep(1);
  } else {
    printf("Parent has x = %d and pid = %d\n", --x, p);
    sleep(1);
  }
}

由于它们是独立的,因此它们同时执行,但父级在输出时是主要的

萨科

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM