在子进程中更新名为 DOLP 的环境变量,并且此更改应该在父进程中可见。 代码如下:
int main(void) {
int cid1 ,i;
char ear[20]="DOLP=7";
putenv(ear);
printf("parent(main) process %d, ppid is %d t %d \n",getpid(),
getppid(),atoi(getenv("DOLP")));
fflush(stdout);
cid1=fork();
if ((cid1 == 0)) {
//child process ...
int sd =atoi(getenv("DOLP")) -1;
char v[10];
sprintf(v,"%d",sd);
setenv("DOLP",v,1);
sleep(2);
printf("c process pid %d, ppid is %d sd value: %d\n", getpid(),
getppid(),atoi(getenv("DOLP")));
fflush(stdout);
sleep(1);
}
else{
sleep(2);
//parent process...
int sd =atoi(getenv("DOLP")) -1;
sprintf(ear,"DOLP=%d",sd);
putenv(ear);
sleep(1);
printf("parent(main) process %d, ppid is %d sd value %d\n",
getpid(),getppid(),atoi(getenv("DOLP")));
fflush(stdout);
}
return 0;
}
我得到的输出如下:
parent(main) process 25958, ppid is 25955 t 7
c process pid 25968, ppid is 25958 sd value: 6
parent(main) process 25958, ppid is 25955 sd value 6
实际上我希望父级为 sd 值打印 5。 现在如何使 DOLP 上的子更新在父进程中可见。
最佳答案
你不能,不能直接。 parent 和 child 是具有不同环境的不同进程。在子项中设置环境变量对父项没有影响,反之亦然。
异常(exception)情况是首次创建子进程时。它的初始环境是父环境的副本。但是在创建 child 之后,它是完全独立的。
如果您希望一个进程改变另一个进程的环境,您需要在两者之间建立明确的通信,并让子进程向父进程发送一条消息,告诉它改变其环境。这可以通过管道、套接字、共享内存或其他进程间通信机制实现。
关于c - 如何将环境变量从 child 传递给 parent ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35169038/