【发布时间】:2017-03-15 09:47:52
【问题描述】:
所以我只想创建一个简单的分叉程序,以每半秒 1 个的速度分叉 5 个孩子,然后显示每个分叉完成的日期和时间。这就是代码的要点
int count = 1;
while(count <= 5){
int kid = fork();
if(kid == -1){
perror("error in fork");
exit(0);
} else if(!kid){
numbytes = read(sockfd, buf, sizeof(buf)-1);
buf[numbytes] = '\0';
printf("%s\n",buf);
}
count++;
usleep(500000); //create per every half second, 500000 = 0.5sec
close(sockfd);
}
return 0;
}
我认为这应该足够简单,但不是分叉 5 次,而是在每次分叉后加倍.. 所以它分叉 1 次,然后是 2,然后是 4、8 .. 等等。
帮助?
【问题讨论】:
-
因为你一直在父进程中分叉 和 子进程。子进程是否应该在完成后退出?
-
另外,你真的应该为子进程
wait,否则当父进程退出时,你将拥有成为孤立的僵尸进程。 -
@Someprogrammerdude 感谢您的快速回复,但现在我无法找出等待和退出的位置。抱歉,这对我来说很新。
-
和块末尾的 exit() 之后? @Karthikeyan.R.S
-
Apologize @Jeans ,您应该在 else if 块中添加
exit并在usleep之前或之后添加wait。