[英]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.