所以我在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;
}
现在我可以看到为什么解决方案可以是 Child有x = 2 而 Parent有x = 0 但是我在尝试可视化树时遇到了一些问题。我可视化的一个大问题是第一个 if 语句是针对子进程的,那么树看起来如何?以下是我对该程序可视化的看法。
或者,0级上的主节点是否为子节点,因为 if 语句首先出现的顺序(这是可能的,但 else 语句可能会出现首先,它同时运行。)
有任何帮助吗?这种可视化是正确的还是我缺少的东西?
非常感谢您的帮助,谢谢。
答案 0 :(得分:1)
不,您的可视化错误。
在fork之后你有两个进程:Parent和Child。 (PERIOD)
单亲可能会产生多个孩子,每个孩子都可能产生自己的孩子。但是在一个单一的叉子之后,&#34;树&#34;是两个&#34;节点&#34;。
不确定您是否尝试绘制图表:
答案 1 :(得分:0)
我不知道问题出在哪里..
架构很好,就像这样。 Fork()通过复制调用进程来创建新进程。成功时,子进程的PID在父进程中返回,并在子进程中返回0。失败时,在父项中返回-1,不创建子进程(谷歌)。您必须检查返回值,以确保您处于独立运行的子进程中。
试试这个:
#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);
}
}
它们是在同一时间执行的,因为它们是独立的,但父母在输出中是主要的
尼古拉斯