使用fork()的Linux进程树

时间:2019-05-03 14:26:05

标签: c linux fork

我正在尝试使用fork()函数创建以下流程树: enter image description here

我知道代码有点凌乱,但是我是一个初学者,尽管我尝试过,但是我对许多关于进程的事情还是不了解。我正在等待有关该代码的建议,以及该代码是否正确的意见。预先谢谢你。

2 个答案:

答案 0 :(得分:2)

您可能希望将任务分解为原始步骤:

  1. 编写一个函数,该函数创建一个执行您提供的功能的子进程。
  2. 重新使用该函数来创建所需的进程树。

示例:

awscli

输出:

export AWS_S3_ENDPOINT=""
export AWS_DEFAULT_REGION=""

答案 1 :(得分:1)

如果您为每个pid使用自己的pid变量(例如p1,p2 ...),则可能不会那么混乱。 如果您评论哪个进程正在运行分支,也许会有所帮助:

pid_t p1, p2, p3, p4, p5, p6, p7;

p1 = getpid(); 
p2 = fork();
if (p2 != 0)    
{
    // P1 runs this branch
    p3 = fork();
    if (p3 == 0)
    {
       // P3 runs this branch
        p4 = fork();
        if (p4 == 0)
        {
            // P4 runs this branch
            p5 = fork();
            if (p5 != 0)
            {
                // P4 runs this branch
                p6 = fork();        
                if (p6 != 0)
                {
                    // P4 runs this branch
                    p7 = fork();        
                }           
            }
        }     
    }
}

您的代码中可能还有其他问题。但例如:

           // create child#1
           fork();

           // create child#2
           fork();

           // create child#3
           fork();

...将生成7个孩子的树。

如果您正在创建一个认真的程序(而不仅仅是玩fork),那么您需要更好地检查fork()的结果,因为它也会失败。