![posix_spawn 和共享文件描述符](https://linux22.com/image/175078/posix_spawn%20%E5%92%8C%E5%85%B1%E4%BA%AB%E6%96%87%E4%BB%B6%E6%8F%8F%E8%BF%B0%E7%AC%A6.png)
我正在玩一个副项目,我想让多个进程共享同一个监听套接字。在我读到的linux文档中,它将posix_spawn
保留文件描述符,因此它应该可以完美工作;但我不确定这种共享实际上是如何完成的。
将文件描述符作为参数传递在某种程度上感觉很麻烦,对 FD 的值进行硬编码也是如此,尽管它可能是相同的,但它只是不正确。
问:如何在子进程中正确使用文件描述符共享?我找到的所有结果都是如何防止它,但在这种情况下它是期望的行为:-)
我正在使用的示例代码:
let pathToExecutable = CommandLine.arguments[0]
// CLI Options parsing
let options = IgniteOptions.parseOrExit()
// For now the child does nothing.
if (options.isChild) {
print("Hello World from child process!")
exit(0)
}
// Creates and binds a TCP socket to the given host / port
let socket = Socket(host: "0.0.0.0", port: options.port)
// Calls posix_spawn in a swift friendly manner (only transforms the params really)
let pid = try spawn(pathToExecutable, args: [pathToExecutable, "-d"])
print("PID of child: \(pid)")