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

时间:2015-04-01 17:36:44

标签: c linux process fork

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

我在here找到了一个几乎相同的问题。然而,当我测试这里给出的第二个解决方案时,它适用于少于10的多个叉子。对于10,它大概是256.为什么?还有另一个解决这个问题的方法吗? (除了使用管道)。 这是实际的代码:

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

某些东西可能会将程序限制为256个进程。检查fork()的返回值,不要假设每次都成功。

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

答案 2 :(得分:0)

我在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()。