进程创建等问题,我可能是一个基本问题。
我创建了一个固定数量的子进程,每个进程只是在打印他们的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
的问题是我不知道为什么只有父进程的第二个print语句中出现,而不是第一个,如果有的话。我知道我不等待我的子进程结束(坦率地说,我不知道我会怎么做),但是如果父进程在结束它的子进程之前执行,为什么不出现它的打印语句,为什么\n
被忽略也在那一行。
任何帮助将不胜感激。
Thx。
更新:如果我将wait(NULL)
替换为printf("\n%d\n",wait(NULL))
它给了我一个完美的输出,没有杂散打印。任何想法可以解决它?毕竟他们都做同样的事情。
好的,我不会等待子进程的帮助吗?如果那样,你能否解释我将如何做到这一点? – Urban
但是你*正在等待,请看'wait()'函数调用。有了孩子pid,我个人更喜欢'waitpid()',以防万一。 – rodrigo
是的,我确实把这一点,但我真的不知道,如果这是放在正确的地方,或者如果itll工作even..thx反正。 – Urban