【发布时间】:2019-02-10 21:43:13
【问题描述】:
我有一些 C 代码使用 fork()+exec()、wait()(或 waitpid())和 kill() - 并假设它们在包含相关 POSIX 标头后存在。
现在,我想让这段代码尽可能多平台化 - 改动最少。因此,没有引入第三方库依赖项,也没有在没有它们的系统上实现这些设施。然而,对我来说,超越 Linux、Windows 和 Mac OS 是很重要的。我这样做的工具是 CMake,带有此代码的项目使用它;和 C 预处理器。可能是 C 语言中的一点点胶水代码。
我的问题:我应该检查什么,我应该在生成的包含文件中添加什么,以及我应该如何修改调用这些函数的代码以在 POSIX 和各种非 POSIX 平台上实现相同的行为?
PS - 我意识到许多平台没有 Unix 风格的信号。让我们假设为了讨论,我只是终止进程,而不是发送其他信号。
【问题讨论】:
-
“没有引入第三方库依赖,也没有重新发明轮子”——在我看来,这是两个直接冲突的要求。
-
@JonathonReinhart:编辑澄清我的意思。
-
好吧,除了显而易见的
#ifdef HAVE_FORK解决方案之外,我不确定您在寻找什么。 -
如果您需要
fork(),那么超越 Linux、Windows 和 Mac 会领先一点,因为您首先必须绕过 Windows没有fork()。 -
@JonathonReinhart:哦,好吧,就是这样,除了我想要一个“如果你有 fork+exec,就用那个;如果你有 spawn,就用那个;如果你有其他类似的东西,但是具有不同的参数顺序,使用“等”等。
标签: c cmake multiplatform waitpid process-management