所以我只想创建一个简单的分叉程序,以每半秒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次......等等。
帮助?
答案 0 :(得分:3)
fork
通常是这种形式。
int pid = fork();
if( pid == -1 ) { /* error */
fprintf(stderr, "Error forking: %s", strerror(errno));
exit(1);
}
else if( pid == 0 ) { /* child */
puts("Child");
exit(0);
}
/* Parent */
printf("Forked %d\n", pid);
请注意,孩子必须退出,否则它将继续执行程序的其余部分。通常你让子进程运行一个函数并退出。
另一部分是主程序应该wait
,直到所有子进程完成,否则你得到zombies。通常是一个循环调用wait()
,直到没有更多的孩子。
int wpid;
int wstatus;
while( (wpid = wait(&wstatus)) != -1 ) {
printf("Child %d exited with status %d\n", wpid, wstatus);
}
将所有内容放在一起,以及如何分叉并等待5个子进程。
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
int main() {
int max_children = 5;
for( int i = 0; i < max_children; i++ ) {
int pid = fork();
if( pid == -1 ) { /* error */
fprintf(stderr, "Error forking: %s", strerror(errno));
}
else if( pid == 0 ) { /* child */
puts("Child");
exit(0);
}
/* Parent */
printf("Forked %d\n", pid);
}
int wpid;
int wstatus;
while( (wpid = wait(&wstatus)) != -1 ) {
printf("Child %d exited with status %d\n", wpid, wstatus);
}
}