int proc_create(int n)
{
int pid;
n = n+1;
printf("The parent process id: %d\n", getpid());
while(1)
{
if(pid=fork() < 0){
perror("Fork Failed!");
exit(1);
}else{
printf("The child process ID is: %d\n", pid);
}
}
}
我编写了上面的函数,它将创建n个子进程,每个子进程将打印出自己的子进程ID。有人能告诉我这些缺陷以及如何改进上述功能。
答案 0 :(得分:2)
n
是一个局部变量,所以你只需要做n + 1,它不会改变任何东西。
它会创建无限的子进程,因为fork位于while(1)
循环
int *proc_create(int n) {
int *childs = malloc(sizeof *childs * n);
printf("The parent process id: %d\n", getpid());
for (int i = 0; i < n; i++) {
int pid = fork();
if (pid < 0) {
perror("Fork Failed!");
exit(1);
} else if (pid == 0) {
return NULL;
} else {
childs[i] = pid;
printf("The child process ID is: %d\n", pid);
}
}
return childs;
}
此过程会产生N个孩子,当他们从proc_create()
返回时,他们将返回NULL
。父节点将返回一个包含其N个子节点的pids的数组。