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

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

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

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

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

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

相关内容