【发布时间】:2016-08-28 07:10:08
【问题描述】:
我检查了应该递归创建进程树的同一段代码:
void proc_recurse(int layer)
{
if(layer<=0) return;
switch(fork()){
case 0:
proc_recurse(layer-1);
printf("%d: child layer = %d\n", getpid(), layer);
break;
case -1:
printf(stderr,"%d: fork failed\n", getpid());
break;
default:
printf("%d: parent \n", getpid());
break;
}
}
int main (int argc, char *argv[]) {
int i;
int n = atoi(argv[1]);
printf("I'm grandParent %d n = %d \n", getpid(), n);
proc_recurse(n);
}
显然,使用管道时结果完全不同。我可以观察到fork 返回到代码开始的位置(注意在输出中重复出现的“grandParent”消息)。谁能向我解释这种差异的性质。
【问题讨论】:
标签: c macos unix recursion fork