是否可以进行“返回”的 exec 调用?

hug*_*omg 5 process environment-variables exec

有没有办法让 exec 系统调用像返回而不是完全替换当前进程映像的函数调用一样工作?我的动机是试图用不兼容的语言集成两个 shell。这个想法是 shell A 将能够执行用 shell B 语言编写的脚本,并且仍然保留对 shell B 脚本所做的环境变量、工作目录等的任何更改。

到目前为止,我能想到的所有解决方案都有一些很大的局限性。

第一个解决方案是让 shell A exec 进入 shell B,然后让 shell B exec 回到 shell A,就像我在我之前问的这个问题中所做的那样。问题在于,这会丢弃初始 shell A 进程的任何状态,例如在当前运行的脚本中的位置、局部变量、别名等。

第二种解决方案是让外壳 A 使用 fork-exec 作为传统子进程运行外壳 B,并让外壳 B 在退出之前序列化其环境并将其发送回外壳 A 进程。这样做的两个好处是它保留了父进程的状态,并且如果我们愿意,我们还可以序列化应用程序级数据,例如函数和别名。问题是子进程从父进程继承了很多东西,很难确保我们没有忘记序列化其中的一个。