代码如下:
#include "include/apue.h"
int glob = 6; /* external variable in initialized data */
int main(void)
{
int var; /* automatic variable on the stack */
pid_t pid;
var = 88;
printf("before fork\n");
if ((pid = fork()) < 0) {
err_sys("fork error");
} else if (pid == 0) {
/* child */
glob++;
var++;
_exit(0);
}
printf("pid = %d, glob = %d, var = %d\n", getpid(), glob, var);
exit(0);
}
运行结果:
$ ./a.out
before fork
pid = 3317, glob = 6, var = 88
APUE(第二版)第177页上说:
运行示例得到:
$ ./a.out
before fork
pid = 3317, glob = 7, var = 89
是不是因为Linux采用了COW(copy on write)技术从而导致行为不像规定中的那样, 子进程在调用_exit
或exec
之前都在父进程的空间中运行呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.