c - 关于Linux fork的问题

标签 c linux linux-kernel

我目前正在学习操作系统,我有这段代码,但我收到无限循环的递归调用,我想要的只是创建一些儿子并计算斐波那契(数字很小),我无法理解为什么儿子们根本无法完成,提前致谢:

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/

相关文章:

Windows 上带有 Docker 的 Linux 内核与 WSL Linux 内核不匹配

java - ANTLR3 C 目标错误生成 TreeParser : ( ASTTreeParser. stg 321:25:匿名模板有 0 个参数但映射到 1 个值)

linux - 从已编译的二进制文件中获取宏值(带调试)

json - 创建单个 IAM 用户以仅访问特定的 S3 存储桶

Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令输出?

linux - 如何启用 CONFIG_SND_DEBUG 进行 pcm 调试?

c - 类似于 C 的 Javadoc ?完整的库文档

c++ - 应用程序的内存布局

c - free() 然后再 malloc()

Linux 内核多核问题