gpt4 book ai didi

c++ - 如何将命令从 C++ 应用程序返回到父终端?

转载 作者:行者123 更新时间:2023-11-28 03:28:04 25 4
gpt4 key购买 nike

是否可以从终端运行 C++ 应用程序并在特定条件下将命令返回到调用它的终端?例如,如果我要在我的终端内并在我的选择之后运行一个应用程序;我的应用程序需要通过运行导出命令来更改我的 PATH,例如:

(使用 BASH)

export PATH=.:/home/User/application/bin:$PATH

在我完成之后和我的应用程序完全关闭之前,我可以让应用程序使用上面的命令更改我的终端本地环境变量吗? Qt 是否提供了这样做的方法?在此先感谢您的帮助!

最佳答案

不,您不能更改父应用程序环境。

为什么?当您的父应用程序启动您的应用程序时(可能使用 system()),它实际上是 fork()ed - 子进程几乎是父进程的复制品,然后那个 child 使用了 execve() 调用,它用您的应用程序的可执行镜像完全替换了该进程的可执行镜像(对于脚本,它将是像 bash 这样的解释器的镜像)。

除此之外,那个过程还准备了一些东西。一个是打开文件的列表,从文件句柄 0、1、2(stdin、stdout、stderr)开始。此外,它还创建了包含环境变量(作为键=值对)的内存块(属于子进程地址空间)。

因为环境 block 属于你的进程,你可以随意改变你自己的环境。但是,您的进程不可能更改父进程(或与此相关的任何其他进程)的环境内存块。可能实现此目的的唯一方法是使用 IPC(进程间通信)并轻轻地要求父进程在其中执行此任务,但父进程必须积极监听(在本地或网络套接字上)并愿意满足此类请求来自某人,在这方面,子进程与任何其他进程相比没有任何特殊之处。

这也是为什么您可以使用一些 shell 脚本在 bash 中更改环境,但只能使用 source. bash 宏的原因 - 因为它由 bash 本身处理,没有启动任何外部进程。

但是,由于上述原因,您不能通过执行任何其他程序或脚本来更改环境。

关于c++ - 如何将命令从 C++ 应用程序返回到父终端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13391715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com