我想知道这个程序关于系统调用的输出。我试着理解,但这很难。
int main (void) {
pid_t pid;
pid = fork();
if (pid > 0) {
int i;
for (i = 0; i < 5; i++) {
printf(" I AM VU : %d\n", i);
sleep(1);
}
exit(0);
}
else if (pid == 0) {
int j;
for (j = 0; j < 5; j++) {
printf(" I have no child: %d\n", j);
sleep(1);
}
exit(0);
} else {
fprintf(stderr, "can't fork, error %d\n", errno);
exit (EXIT_FAILURE);
}
}
答案 0 :(得分:2)
获得此代码进行编译和运行后,父代将输出如下内容:
I AM VU : 0
I AM VU : 1
I AM VU : 2
I AM VU : 3
I AM VU : 4
单个孩子将输出如下内容:
I have no child: 0
I have no child: 1
I have no child: 2
I have no child: 3
I have no child: 4
孩子的五行几乎肯定会与父母的输出线混在一起,所以你会在屏幕上看到类似的东西:
I AM VU : 0
I have no child: 0
I AM VU : 1
I have no child: 1
I have no child: 2
I have no child: 3
I AM VU : 2
I have no child: 4
I AM VU : 3
I AM VU : 4
如果fork()失败,程序将输出如下内容:
can't fork xx
其中xx是错误的。
注意我不认为fork( )
是系统调用,而是调用库函数。实践和效果差异很小,但仍然存在。
答案 1 :(得分:0)
&#39; man fork&#39;将回答有关fork返回的问题。
编译代码并使用&#39; strace -f a.out&#39;遵循它所做的事情。
我不确定该程序正在循环播放和休眠。我的猜测是,只是为了证明两个过程的输出顺序无法预测。