【问题标题】:How many processes this Program Creates这个程序创建了多少进程
【发布时间】:2015-06-17 12:58:45
【问题描述】:

拜托,我大学的医生懒得解决这个考试题,谁能帮帮我?

#include <stdio.h>
#include <unistd.h>

int main() {
    int i;
    for(i=0;i<3;i++)
        if(fork()) i++;

    while(1);
    return 1;
}

问题是:这个程序生成了多少进程?

我画了进程树,我认为这个程序不会结束。所以有无数个进程,但我不确定。

【问题讨论】:

  • 您为什么不尝试将一些printf 语句放入并尝试自己运行呢?这将使您清楚地了解每个流程在做什么。

标签: operating-system fork


【解决方案1】:

您拥有的 while 循环不是无限的,因为它们最终会返回一个值并退出。但是,我认为进程是指将在内存中单独运行的不同线程。

编辑: 在这种情况下,您将通过第一次调用fork() 方法来生成一个线程,该方法将返回 true 并执行 if 语句。此时 i 将变为 1,在 for 循环结束时将增加一个,因此下一次迭代将有 i = 2。此时您将再次调用 fork,然后循环将退出,所以答案最后是2个线程。

【讨论】:

  • 是的进程我的意思是新线程@mmvsbg,但是当第一次调用fork时,创建的线程将有一个变量 i=0 ,并且这个创建的线程将创建一个具有变量 i=0 和等等……是这样吗?
  • 请看我上面的回答,我做了修改。线程本身不会有变量 i。 i 整数只是你的 for 循环计数器,它决定你调用 fork() 的次数。
猜你喜欢
  • 2013-11-01
  • 2014-06-22
  • 1970-01-01
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多