计算在 for 循环中使用 fork 创建的进程数

Count number of processes created using fork in a for loop

我正在尝试找到一种方法来计算在长度为 10 的 for 循环中使用 fork() 调用创建的进程数。很容易看出 n 次调用的结果是 2^n,但我需要一种在程序中计算它的方法。

我在 中发现了一个几乎相同的问题。然而,当我测试这里给出的第二个解决方案时,对于少于 10 个的叉子,它工作正常。对于 10 个,它产生 256。这是为什么?还有这个问题的另一种解决方案吗? (除了使用管道)。 这是实际的代码:

for(i=1; i<=10; i++) {
    fork();
    printf("The process with the PID=%d\n", getpid());
}

可能是某些原因将程序限制为 256 个进程。检查fork()的return值,不要以为每次都成功。

当您在命令行上 运行 ulimit -u 时会发生什么?

一个进程的退出状态只有一个字节。因此,您不能通过进程退出代码计数超过 255。此外,您尝试的特定算法的一个怪癖是它恰好产生了最大可能的退出状态(父进程向其添加 1 以获得 256)。 exit() 函数仅使用其参数的最低有效 8 位(从 main() 返回 x 与调用 exit(x) 具有相同的效果)。

要计算得更高,您需要采用不同的方法。您可以在共享内存中建立一个计数器,并让每个子进程递增它(通过适当的同步)。这运行得很干净,但是共享内存使用起来并不简单。您还可以让每个进程附加到一个文件中以留下记录;然后父进程可以读取文件以计算有多少进程留下了这样的记录。

我在这里回答了 QUORA 上发布的一个非常相似的问题:http://www.quora.com/For-I-0-I-3-I++-fork-how-can-I-make-an-algorithm-to-count-the-number-of-processes-and-display-it-only-once/answer/Richard-Conto

不检查 fork() 的结果,表示您没有检查此系统调用的文档。请先努力理解 fork()。