代码如下:
#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
之前都在父进程的空间中运行呢?
![]() | 1 joyeblue 2015-04-06 23:17:39 +08:00 lz给的例子中的代码是调用是fork,而不是调用的vfork。 |
![]() | 3 inevermore 2015-04-07 09:38:46 +08:00 。。 |
![]() | 4 jemyzhang 2015-04-07 10:30:41 +08:00 子进程对父进程中的同名变量的更改,不会影响到父进程的值 |