第一次使用C代码并被此命中。有人熟悉“ forkN ”吗?我读过有关fork但我找不到任何对“ N ”的引用...为了把它放到上下文中,我必须确定下面的代码中运行了多少进程。 / p>
int main(int argc, char* argv[]) {
forkN(6);
}
void forkN(int count) {
if(count > 0) {
fork();
forkN(count-1);
}
}
非常感谢任何帮助!
答案 0 :(得分:4)
你必须记住关于fork的事情是它返回两次,所以使用3
我会告诉你分析。
int main(int argc, char* argv[]){
forkN(6)
}
void forkN ( int count ) {
if(count > 0) {
fork();
//returns twice, once for the parent process, once for the child.
forkN(count-1);
//Both processes call forkN
}
}
--main process -- forkN(3) -- if(3 > 0)-- fork() --- forkN(2) -- if(2>0) -- fork().. forkN(1)...
|Child |
-------- forkN(2) -- if(2>0) -----|-fork()..
| |
| -------forkN(1)..
|----- forkN(1)..
enter code here
你可以看到它变得复杂。要知道的是每次调用fork()
时,2个进程调用forkN()
,并且这2个进程中的每一个都创建自己的子进程。
答案 1 :(得分:0)
forkN()
函数在您的示例源中定义,非常明显,“N”可能让您感到困惑吗?答案是“forkN”只是本地定义函数的名称,可以很容易地命名为“repeated_do()”或“countdown_lots_of_times()”。至于识别正在运行的进程数,正如您所见,名为“forkN()”(或“repeated_do()”或“countdown_lots_of_times()”的函数递归调用fork()
。绘制流程创建并计算它们应该相当简单(或者你可以指数化。)