我有这个数字数组,告诉每个父进程必须进行多少子进程,或者说结构树的结构是什么。
例如,如果数组包含1 4 0 0 3,则proc树看起来像这样 http://shrani.si/f/S/IW/8HrGEVJ/proctree.jpg
我认为它可以通过递归来解决,但我不知道如何读取数组并确定我应该在哪里以及有多少子句。另外,如果您的代码模板如下所示,如何从父母中创建更多子项:
void recTreeProc(){
/* create process */
pid_t pid;
pid = fork();
if (pid == -1) {
/* error */
perror("fork failed");
exit(EXIT_FAILURE);
}
else if (pid == 0) {
/* child process */
//call recursion?
}
else {
/* parent process */
//wait for all the children to execute
int status;
(void)waitpid(pid, &status, 0);
}
}
答案 0 :(得分:1)
我无法帮助您实现树和数组的实现代码,因为我没有得到值的含义,但对于多个孩子,您可以尝试:
void recTreeProc() {
/* create process */
pid_t pid;
int n = 0;
int cpid[CHILD_NB];
do {
pid = fork();
if (pid == -1) {
perror("fork failed");
exit(EXIT_FAILURE);
}
else if (pid) {
cpid[n];
}
n++;
} while(n < CHILD_NB && pid); // I want CHILD_NB childs
if (!pid) {
/* childs */
}
else {
/* parent process */
//wait for all the children to execute
int status[CHILD_NB];
n = 0;
while (n < CHILD_NB) {
(void)waitpid(cpid[n], &status[n], 0);
n++;
}
}
}