我从 APUE 拿了代码。在 Ubuntu 12.04 中,如果我在没有任何优化的情况下使用 gcc,我将得到与本书相同的结果:
pid = 4122, glob = 7, var = 89.
如果我使用 gcc -O2,那么 var 将为 88。这是因为 gcc 优化会使用 vfork() 做一些事情吗?
#include "apue.h"
int glob = 6;
int
main(void)
{
int var;
pid_t pid;
var = 88;
printf("before vfork\n");
if ((pid = vfork()) < 0) {
err_sys("vfork error");
} else if ( pid ==0) {
glob++;
var++;
_exit(0);
}
printf("pid = %d, glob = %d, var = %d\n", getpid(), glob, var);
exit(0);
}