我目前正在学习操作系统,我有这段代码,但我收到无限循环的递归调用,我想要的只是创建一些儿子并计算斐波那契(数字很小),我无法理解为什么儿子们根本无法完成,提前致谢:
int fibonaci(int n) {
if(n < 2){
return n;
}
return fibonaci(n - 1) + fibonaci(n - 2);
}
int main(int argc, char* argv[]) {
//some checkings, and variables
for (i = 0; i < argc; ++i) {
son_pid = fork();
if (son_pid == 0) {
fibonaci(var); //var is some finite variable
break;
}
}
if(son_pid != 0){
while(wait(&status) != -1){}
}
return 0;
}
已编辑
所有检查都已完成,问题出在逻辑上!!!
最佳答案
这可能不是解决方案,但尝试用 return 0 代替break;
我确实相信问题在于 fork /处理子代码与父代码。我不明白你为什么把休息时间放在那里。计算完斐波那契数之后,儿子应该回来了。中断可能会产生一些不需要的结果。
关于c - 关于Linux fork的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5867284/