【问题标题】:two fork() calls?两个 fork() 调用?
【发布时间】:2013-10-20 13:28:23
【问题描述】:

我知道,如果我调用fork() 一次,父母会收到child_id,而孩子会收到0,如果是-1,则表示失败。

我的问题是如果我有两个fork() 调用,如何区分 child1 和 child2 以及 parent?

我想:

fork1_id <0 || fork2_id < 0  >> fail
fork2_id==0   >> child2
fork1_id==fork2_id  >> child1 
else  >> parent

【问题讨论】:

  • 我没有投票将其作为“离题”结束,因为关于 fork() 的问题可以说是这里的主题,因为它是 *​​nix 的事情。但是,我确实投票将其关闭为“不清楚”(请参阅​​我的回答)。

标签: process system-calls fork


【解决方案1】:

我的问题是如果我有两个 fork() 调用,如何区分 child1 和 child2 以及 parent?

您需要发布实际代码,因为您的意思不明确。如果你的字面意思是这样的:

fork()
fork()

那你要区分:

Parent -> Child1 -> Grandchild
       -> Child2

自从第一次分叉后,第一个孩子就会分出一个孙子。

或者,您可能的意思是第二个分叉仅在父级中。在任何情况下,您都可以像处理第一个分支一样区分第二个分叉的父级和子级。

【讨论】:

    【解决方案2】:

    这是我的代码;我需要在第一个叉子之后调用另一个叉子,然后根据 if_conditions :打印我是 child_1 进程或者我是 child_2 进程或者我是父母......希望现在很清楚;

    int main()
    {
    pid_t childpid; 
    
    childpid = fork();
    
    
        if (childpid == 0) 
        {
            printf("I am the child process!\n");
    
        }
        else if(childpid > 0) 
        {
            printf("I am the parent process!\n");
        }
    
    else 
    {
        perror("fork"); /* display error message */
    
    }
    return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-02-18
      • 1970-01-01
      • 1970-01-01
      • 2017-01-12
      • 2019-11-03
      • 1970-01-01
      • 2017-07-29
      • 2015-03-30
      • 2011-11-30
      相关资源
      最近更新 更多