gpt4 book ai didi

c - Unix:叉到树

转载 作者:太空宇宙 更新时间:2023-11-04 02:31:19 25 4
gpt4 key购买 nike

我是 unix shell 编程的新手,我真的很难得到关于 fork 和它们的树的很好的解释。我现在所知道的是,一种从主进程(父进程)复制进程(子进程)的 fork 。

更具体地说,我无法从一段代码中完全理解进程树的样子。

例如,在这段代码中:

pid1=fork();
if (pid1!=0)
{
pid2=fork();
pid3=fork();
}
else
{
pid4=fork();
}

在我看来,原始进程下有 3 个进程(pid1、pid2、pid3)和这三个进程之一的子进程(pid4),也许是 pid2 的。

我试着用一些写得更糟糕的代码来运行它:

int pid1, pid2, pid4, pid4;

printf("I'm the original Process %d with parent %d \n", getpid(), getppid());

pid1=fork();

if(pid1!=0)
{
pid2=fork();
printf("I'm P2 %d with parent %d \n", getpid(), getppid());
sleep(1);

pid3=fork();
printf("I'm P3 %d with parent %d \n", getpid(), getppid());
sleep(1);
}
else
{
pid4=fork();
printf("I'm P4 %d with parent %d \n", getpid(), getppid());
sleep(1);
}

编辑:感谢 dbush,我在上面的代码中放置了一些 sleep(1),所以我可以看到 ppid 的

enter image description here

那么,这些类型的代码是如何形成树的呢?

最佳答案

你总共会得到 5 个 child :

                  c2--------------
|
|
c1---------------------------
| p4
|
|
|
| c5--------
| |
| |
| c3-----------------
| | p3
| |
| | c4--------
| | |
| | |
p---------------------------------
p1 p2 p3

第一个分支发生在 p1 点,它创建了子节点 c1。这个 child 进入代码的 else 部分并在点 p4 处运行 fork ,创建 child c2

回到父级,它在 p2 点 fork 创建子级 c3这两个然后这些进程在点p3 处 fork ,创建子c4c5

您看到某些进程将其父进程报告为 1 的原因是父进程在子进程之前完成。尝试将 sleep(1) 放在这个 block 的底部,让父进程有时间停留,以便子进程可以看到它们。

关于c - Unix:叉到树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42962067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com