在子进程中编写c ++

时间:2014-10-20 16:34:43

标签: c++ process fork parent

我正在尝试更改子进程内的变量值,并将其保留给程序的其余部分。所以在下面的例子中为什么我的cout继续打印0,我该如何解决呢?

int var = 0;
int pid = fork();

if (pid == 0){ //child process
   var = 1;
   exit(1);
}
else if (pid> 0){  //parent process
         if (-1 == wait (0))
              perror ("there was an error with wait");
}

cout << var;

2 个答案:

答案 0 :(得分:3)

这就是代码执行的方式。

子过程

int var =0;

var = 1;
exit (1);

家长流程

int var =0;
if (-1 == wait (0))
  perror ("there was an error with wait);

cout << var;

正如您所看到的,父进程不会更改var

当您fork时,子级和父级具有在分割为执行路径之前存在的变量的单独副本。 流程不会共享相同的内存块。因此,更改子级var不会影响父级中的var

如果您想要相同内存上的多个执行路径,则应使用线程

感谢您的阅读。

答案 1 :(得分:0)

看起来fork()调用失败了。检查errno值

返回值 成功时,子进程的PID在父进程中返回,并在子进程中返回0。失败时,在父项中返回-1,不创建子进程,并正确设置errno。

错误 EAGAIN fork()无法分配足够的内存来复制父页面表并为子节点分配任务结构。 EAGAIN 由于遇到调用者的RLIMIT_NPROC资源限制,因此无法创建新进程。要超过此限制,进程必须具有CAP_SYS_ADMIN或CAP_SYS_RESOURCE功能。 ENOMEM fork()无法分配必要的内核结构,因为内存很紧张。

符合SVr4,4.3BSD,POSIX.1-2001。