コードは 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);
}