繁体   English   中英

在子进程中编写c ++

[英]writing in child process c++

我试图在子进程中更改变量值,并将其保留给程序的其余部分。 那么在下面的示例中,为什么我的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;

这就是代码执行的方式。

子进程

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父。

如果要在一块内存上使用多个执行路径,则应使用thread

感谢您的阅读。

看起来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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM