我有两个孩子和他父亲的代码,但是有一个问题,因为所有的孩子(和父亲在main上执行代码)。
代码:
int main() {
switch (fork()) {
case 0: //child1
break;
default:
switch (fork()) {
case 0: //child2
break;
default: //father
break;
}
}
printf("hi\n");
}
输出:
hi
hi
hi
答案 0 :(得分:1)
使用fork()
时,除了fork()
调用的返回值之外,它会创建父进程的几乎完全相同的副本。除了依赖于返回值的任何内容之外,它们都会继续并执行所有相同的代码。
由于对printf()
的调用不是有条件的,因此它将在父进程和子进程中执行。如果您希望它仅在特定进程中执行,则应将其放在switch()
语句的该分支中。