[英]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()通过复制调用过程来创建一个新过程。 成功后,将在父级中返回子进程的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.