【发布时间】:2023-03-14 19:50:01
【问题描述】:
祝大家白天好
我对@987654321@ 感到困惑。 fork() 是分叉子进程还是只分叉父进程?
请帮忙看一些例子
#include <unistd.h>
#include <stdio.h>
int main() {
if (fork()) {
fork();
printf(" X\n");
}
return 0;
}
这是我想如何构建流程的方式:
parent
|
/ \
Parent Child
所以输出将是
X X X
另一个例子是
#include <unistd.h>
#include <stdio.h>
int main() {
fork();
fork();
fork();
printf(" X \n");
return 0;
}
图表会是这样的吗?
Fork start
/ \
Parent Child 1st fork done output 2 of X
/ \ / \
P C P C 2nd fork done output 4 of X
/ \ / \ /\ /\
P C P C P C P C 3rd fork done output 8 of X
另一个问题我怎么画
if (fork() || fork() || fork())
fork();
或
if (fork() && fork())
fork();
如果有人纠正我,我会很高兴。
【问题讨论】:
-
看不懂你的图,也看不懂你的问题。一个成功的
fork()系统调用更好地理解为调用它的进程的神奇克隆。 -
fork 创建父子进程,对吧?像 pid==0 表示孩子,pid>0 表示父母,所以当我 forking() 并打印 X 并为孩子和父母打印时
-
我建议你通过编译并在里面添加像
printf("at line %d pid %d\n", __LINE__, (int)getpid()); fflush(NULL);这样的语句来尝试每个简单的例子。 -
投票结束时“不是一个真正的问题”:询问
if (fork() || fork() || fork()) fork();中发生的事情对“混乱”没有帮助。 -
@user1098207:我无法解析“fork 父进程”,显然你不能 fork() 创建一个已经存在的进程。父进程一般理解为首先执行
fork()调用的进程。然后 两个 进程从调用中返回,这就是它的魔力。
标签: c unix fork system-calls