我需要从C ++应用程序中调用一个函数(一个特定的LLVM JIT)。此调用可能会失败,甚至会发出abort()或exit()信号。如何避免或至少减少对主机应用程序的影响?有人建议使用fork(),但我需要一个windows和posix的解决方案。即使我会使用fork()......两个进程是否可以进行通信(传递一些指针)?
答案 0 :(得分:2)
你基本上必须隔离可能会失败的调用,所以是的,你可能需要为它创建一个单独的进程。我实际上很想创建一个只包含这个特定调用和必要的支持功能的小型可执行文件,并从主可执行文件中调用它。这可以帮助您解决Windows上缺少fork()
的问题,并允许您使用相同的机制进行通信。
您不能在进程之间传递指针,因为它们不共享相同的地址空间。我要做的是让生成的进程从stdin读取数据并写入stdout,控制进程将数据传输到子进程的stdin并从子进程中读取。基本上是Unix(命令行)过滤器的工作方式。如果你传递大量数据,另一种选择是写入/读取磁盘上的文件(更好的是RAM磁盘)并以这种方式进行通信,但除非你说的是大量数据,否则这是过度的
正如Eugen在评论中指出的那样,如果你想传递指针或者另一个进程间通信机制,你也可以使用共享内存,具体取决于你需要传递多少数据。也就是说,选择最简单的方法,因为这些嵌套的可执行文件首先不容易调试。