我正在遵循有关
应该打印出这个: (因为子进程将从
但实际打印出的是这个:
fork()
的这篇指南,但有些地方对我来说不太清晰。
两个进程将从其后的下一条语句开始执行。 在本例中,两个进程将从分配语句开始执行,如下所示:
根据此句话,这个脚本
printf("before ");
fork();
printf("after ");
应该打印出这个: (因为子进程将从
printf("after")
开始)before after after
但实际打印出的是这个:
before after before after
那么子进程是从文件的第一行开始运行的吗?你能告诉我我的代码有什么问题吗?是我误解了那句话吗?
编辑
脚本在OS X上被编译并执行。
int i = 10;
,则子进程将具有变量i
,其值为10(直到您覆盖它)。但它们仍然是不同的变量,只是在分叉时恰好包含相同的值。 - Philipp Murryfork
操作在内存级别上运行,因此将其描述为“继承变量”有点误导人。最好将整个内存空间视为被克隆,即使在实践中,直到其中一个进程写入内存之前内存是共享的。 - b4hand