【发布时间】:2018-12-26 13:11:56
【问题描述】:
最近在学习linux下的fork()函数。我写了一个程序。
#include<stdio.h>
int main(){
int p1, p2;
while((p1 = fork()) == -1);
if(p1 == 0)
printf("b");
else{
while((p2 = fork()) == -1);
if(p2 == 0)
printf("c");
else
printf("a");
}
}
编译并运行后,我得到了一个意想不到的百分号。
但是如果我在这些字母后面加上\n,百分号就会消失。
有人知道原因吗?
我还有一个问题。每次我重新运行程序时,我都会得到相同的答案。它总是显示“acb”。顺序始终相同。为什么?
【问题讨论】:
-
while((p1 = fork()) == -1);看起来很像 Android 的 Rage Against the Cage -
在C语言中,函数
fork()原型通过#include <sys/types.h>和#include <unistd.h>这两个头文件的组合可见。如果没有这两个头文件,代码将依赖默认类型(通常是int,但不一定)你的编译器应该已经告诉你这个问题。 -
关于:
while((p1 = fork()) == -1);最有可能的是,如果fork()失败,它将继续失败。这不是检查对fork()的调用中的错误的有效/可靠方法@ -
当一个父进程fork一个子进程时,它应该总是调用
wait()或waitpid()以便在子进程退出之前它不会退出。