代码如下:
#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
子进程对父进程中的同名变量的更改,不会影响到父进程的值
|