- 论坛徽章:
- 0
|
当fork()创建子进程时,在子进程中,原有的变量是完全复制一份?还是怎样处理?
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
int sharemem = 0;
int
main (int argc, char **argv)
{
pid_t pid;
if ((pid = fork ()) == 0)
{
int i;
for (i = 0; i < 1000; i++)
{
sharemem = i;
sprintf (status, "In Sub");
fprintf (stdout, "In Sub:%d----%ld\n", sharemem, &sharemem);
sleep (1);
}
exit (0);
}
else if (pid < 0)
{
fprintf (stderr, "error:%s\n", strerror (errno));
exit (-1);
}
while (1)
{
fprintf (stdout, "In Main: %d----%ld\n", sharemem, &sharemem);
sleep (1);
}
exit (0);
}
运行结果:
In Sub:0----134519172
In Main: 0----134519172
In Sub:1----134519172
In Main: 0----134519172
In Sub:2----134519172
In Main: 0----134519172
......
在子进程中,sharemem被修改,而父进程中的值保持不变,但在父子进程中,变量的地址是完全相同的。
有哪位朋友熟悉进程创建时的变量处理问题?
望告知,多谢。 |
|