ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

面试题: 三行fork代码-90%的人算不对进程数

2026/9/6 3:56:26 拓冰建站 浏览量
面试题: 三行fork代码-90%的人算不对进程数 大家好我是仲一。之前有读者找我模拟面试我问了一道题intmain(){fork();fork()fork()||fork();fork();}不算 main 进程本身一共创建了多少个新进程对方想了挺久最后给了一个数字。我问怎么算出来的说不太清楚。这不怪他——这道题同时考两个知识点漏一个就算不对。这道题是兆易创新校招笔试的原题。借它把 fork 和短路运算一次说清楚。fork 的基本规则fork 调用一次返回两次。父进程里返回子进程的 PID子进程里返回 0。返回负数说明创建失败。pid_t pidfork();if(pid0){// 子进程}elseif(pid0){// 父进程}短路规则左边是假右边就不看了。左边是真才继续看右边。||左边是真右边就不看了。左边是假才继续看右边。解这道题就靠这两条。逐行推导拆成三行来看。第 1 行fork()进程翻倍。1 个变 2 个新增 1 个。第 2 行fork() fork() || fork()这是核心。每个进程执行到这行时都要按短路规则算。第一个 fork 跑完每个进程变成两个。一个返回 0子进程一个返回非 0父进程。返回非 0 的进程在语境下算真继续执行第二个 fork。第二个 fork 再一分为二。返回 0 的进程在语境下算假短路了第二个 fork 不执行。但表达式还没完——后面还有||。||左边是假所以第三个 fork 必须执行。这里容易想错的是第二个 fork 产生的子进程里fork 返回 0。这个子进程里的也是假所以它也会去执行第三个 fork。走完这条链第二行三个 fork 总共新增了 8 个进程。第 3 行fork()到这一行一共有 10 个进程原始 1 第一行 1 第二行 8。每个再 fork 一次新增 10 个。加起来1 8 10 19。常见的错误答案有人算 30有人算 24。30 是把中间行当成三个独立 fork 来算没考虑短路。24 是少算了一层。不信的话把代码在 Linux 上跑一遍数一下进程数就清楚了。面试官可能会追问fork 之后父子进程谁先执行不确定取决于调度器。子进程继承了哪些东西文件描述符、信号处理方式、环境变量——但地址空间是自己的写时复制。怎么用 fork 创建固定数量的子进程配合循环fork 返回 0 时 break 出来不然子进程会继续 fork。题目聊完了思路应该清楚了。你第一次算出来是几个留言说说。end往期推荐嵌入式Linux必读经典书籍嵌入式学习路线推荐一位读者逻辑清晰的提问机械转行嵌入式成功上岸一位音视频方向读者秋招上岸的经历