【发布时间】:2011-09-24 10:56:21
【问题描述】:
我是流程创建等方面的新手。所以可能是一个基本问题。
我创建了固定数量的子进程,每个子进程除了打印它们的 pid 什么都不做。问题出在我得到的输出中。看看:
int main(){
pid_t pid=0;
int i=0,status=0;
for(i=0;i<3;i++){
pid=fork();
switch(pid){
case 0:{ //Child
printf("\nChild pid: %d",getpid());
exit(0);
break;
}
case -1: {//Error
printf("Error occured in fork");
exit(1);
break;
}
default:{
printf("\nParent id: %d",getpid());
printf("\nIts child id: %d",pid);
wait(NULL);
}
}
输出:Child pid: 1450
Parent id: 1445
Its child id: 1450
Child pid: 1455Its child id: 1450
Parent id: 1445
Its child id: 1455
Child pid: 1460Its child id: 1455
Parent id: 1445
Its child id: 1460
问题是我不知道为什么只出现父进程的第二个打印语句而不是第一个,如果有的话。我知道我没有等待我的子进程结束(坦率地说我不知道我会怎么做),但是如果父进程在结束其子进程之前执行,为什么它的打印语句都没有出现,为什么\n在该行中也被忽略了。
任何帮助将不胜感激。
谢谢。
更新:如果我用printf("\n%d\n",wait(NULL)) 替换wait(NULL),它会给我一个完美的输出,没有杂散的打印。知道什么可以解决吗?毕竟他们都做同样的事情。
【问题讨论】: