2014-10-20 88 views
-1

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

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; 

回答

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

如果你想在同一一块内存多个执行路径,你应该使用线程

谢谢您的阅读。

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。